2017-02-01 8 views
1

私は、以下のドキュメントあたりのセッションファクトリを取得するためにdropwizardの休止バンドルを使用するプロジェクトに取り組んでいます:プロジェクトは、任意のXMLを使用してのみの設定のための注釈付きクラスを使用していませんxmlなしでDropwizard HibernateBundleクラスでsetNamingStrategyを設定するにはどうすればよいですか?

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

例のようにバンドルします。

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(); 
    } 
}; 

はしかし、我々は、私は@Tableアノテーションが上書きされるようにDAOオブジェクトのテーブル名に環境を付加する必要があるユースケースを持っています。

私は、以下のドキュメント

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

しかし、どのように私は私のdropwizard休止状態バンドルに命名戦略をフックんにつき、ImprovedNamingStrategyを実装するクラスを持っています。私は

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から値を読み取る2番目の設定オブジェクトを作成することを決めました。

+0

あなたの質問をあなたの答えに変更したり、答えとして投稿したりできますか? –

3

Dropwizard 0.8.4ので私に役立つこの解決策が見つかりました。それがDropwizard 0.7.1であなたを助けることができるかどうかは分かりませんが、同じ質問でGoogleから来る読者には間違いなく役立ちます。

HibernateBundleを拡張して、configure()を上書きすることができます。このメソッドは、SessionFactoryFactoryが構築される直前に呼び出され、Configurationオブジェクトがあります。このメソッドをオーバーライドして、必要な特別な設定を追加することができます。

例:それは私が使用したものだが、あなたも直接HibernateBundleを使用することができますので、

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を使用しています。

+0

申し訳ありませんが、どのように使用しますか?私はこれをOPのバージョンに適用しようとしましたが、コンストラクタのClassFile.classのリストをもう受け入れません。あなたはこれを設定ファイルの中でどのように実践するのか教えていただけますか? –

関連する問題