2013-10-02 21 views
7

私はSpring(Boot)でREST Webサービスを構築しており、xml構成なしでormマッパーとしてhibernateを使用しようとしています。Hibernate命名方針

私は基本的にうまく機能していますが、設定に問題があります。 @ConfigurationファイルでLocalContainerEntityManagerFactoryBeanを@Beanとしてインスタンス化します。 以下の例のようにhibernate.ejb.naming_strategyを設定します - >これは存在しない(カラム名はMy @EntityクラスのようなcamelCaseです)が、テーブルを作成するために働くようですが、クエリが実行されると、 "この命名設定について、そしてunder_score_attributesを使って別の種類の命名戦略を使用しようとすると、明らかにそれらのクエリは失敗します。私が設定する必要がある他のプロパティはありますか?あるいは、好ましくはのプロパティを設定する別の方法として、にcfg.xmlまたはpersistence.xmlを追加しないでください。

LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
Properties props = new Properties(); 
props.put("hibernate.hbm2ddl.auto", "create"); 
props.put("hibernate.ejb.naming_strategy","org.hibernate.cfg.DefaultNamingStrategy"); 
lef.setJpaProperties(props); 
lef.afterPropertiesSet(); 

答えて

22

HibernateJpaAutoConfigurationを使用すると、ローカル外部設定を使用して命名方法(および他のすべてのJPAプロパティ)を設定できます。たとえば、application.propertiesの場合:

spring.jpa.hibernate.ddl_auto: create 
spring.jpa.hibernate.naming_strategy: org.hibernate.cfg.EJB3NamingStrategy 
+0

ありがとうございます。これはそれを行う正しい方法のように見えます! – Alex

+0

しかし、これらのプロパティのドキュメントはどこにありますか? – Alex

+0

と私のコメントに答える:https://github.com/spring-projects/spring-boot/blob/master/docs/application.ymlこれは非常に便利です...すべての自動設定プロパティのため – Alex

0

プログラムプロパティを使用してこのプロパティを設定しようとしましたか?または、パッケージルートのhibernate.propertiesファイルですか?またはJVMシステムのプロパティですか?すべてはhereと記載されています。

私の経験から、XMLを使用しないことを主張すると、Hibernateの問題を診断するのが難しいことがあります(私の好みでもあります)。他に何も動作しない場合は、少なくともコンフィギュレーションファイルを定義する必要があります。

-2

解決策が見つかりました。

@EnableAutoConfiguration(exclude={HibernateJpaAuto Configuration.class}) 

JpaAutoConfigurationを除外する必要があります。それでも、これはバグかもしれないと思います。通常、自分の@Configurationを使用すると、自動的に "元に戻る"べきであるからです。

+0

これは、Spring Bootを使用する目的をむしろ無効にします。下の私の答えを見てください。 –