2017-02-01 6 views
1

Я работаю над проектом, который использует спящий режим сверток dropwizard, чтобы получить сессионный завод за ниже документы:Как установить значениеNamingStrategy в классе Dropwizard HibernateBundle без xml?

http://www.dropwizard.io/0.7.1/docs/manual/hibernate.html

Проект не использует какие-либо XML и использую только аннотированные классы для конфигурации как и в примере.

public class ExampleConfiguration extends Configuration { 
    @Valid 
    @NotNull 
    @JsonProperty("database") 
    private DataSourceFactory database = new DataSourceFactory(); 

    public DataSourceFactory getDataSourceFactory() { 
     return database; 
    } 
} 

private final HibernateBundle<ExampleConfiguration> hibernate = 
new HibernateBundle<ExampleConfiguration>(
    some.class 
    ) { 
    @Override 
    public DataSourceFactory getDataSourceFactory(ExampleConfiguration configuration) { 
    return configuration.getDataSourceFactory(); 
    } 
}; 

Однако, у нас есть случай, когда использование мне нужно предварять среды для имени таблицы в DAO объекты таким образом, что @Table аннотация переопределена.

У меня есть класс, который реализует ImprovedNamingStrategy, согласно ниже документам

http://docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/cfg/ImprovedNamingStrategy.html

Но как я зацепить стратегию именования в мой dropwizard спящего пачке. Я хотел бы быть в состоянии сделать что-то вроде этого ...

hibernateBundle.setNamingStrategy(ImprovedNamingStrategy.Instance) 

или

hibernateBundle.addAnnotatedClass(someHibernateNamingPropertyConfig) 

https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/cfg/Configuration.html#setNamingStrategy(org.hibernate.cfg.NamingStrategy)

Однако, hibernateBundle API не позволяет какой-либо из этого.

Просматривая исходный код HibernateBundle

https://github.com/dropwizard/dropwizard/blob/master/dropwizard-hibernate/src/main/java/io/dropwizard/hibernate/HibernateBundle.java

Вы можете видеть, что он использует "импорт io.dropwizard.Configuration;" в отличие от org.hibernate.cfg, который раскрывает все эти методы. Я пытаюсь избежать крупного рефакторинга, поэтому, если есть «хакерский» способ принудительно установить свойство именования на комплекте, тогда я в порядке с этим.

Любые идеи о том, куда идти отсюда, будут высоко оценены.

ответ

0

Я просто решил не использовать Hibernate Bundle и создать второй объект конфигурации, который считывает значения из Hibernate Bundle.

+0

Можете ли вы изменить свой вопрос своим ответом или разместить его в качестве ответа? –

3

Нашли решение для этого, которое работает для меня in Dropwizard 0.8.4. Не уверен, может ли он помочь вам с Dropwizard 0.7.1, но это определенно будет полезно для читателей, поступающих из Google с тем же вопросом.

Вы можете расширить HibernateBundle и переопределить configure(). Этот метод вызывается непосредственно перед тем, как будет создан SessionFactoryFactory, с объектом Configuration. Затем вы можете переопределить метод для добавления каких-либо специальных конфигураций, которые могут вам понадобиться.

Пример:

public abstract class DatabaseWithImprovedNamingStrategyBundle extends ScanningHibernateBundle { 
    public DatabaseWithImprovedNamingStrategyBundle(String pckg) { 
    super(pckg); 
    } 

    @Override 
    protected void configure(Configuration configuration) { 
    super.configure(configuration); 
    configuration.setNamingStrategy(ImprovedNamingStrategy.INSTANCE); 
    } 
} 

В этом примере используется ScanningHibernateBundle, потому что это один я использую, но вы можете использовать HibernateBundle непосредственно тоже.

+0

Извините, но как вы это используете?Я попытался применить это к версии OPs, но он больше не принимает список ClassFile.class в конструкторе. Можете ли вы рассказать мне, как вы могли бы применить это на практике в файле конфигурации? –