2013-10-02 14 views
7

Ich baue einen REST-Webservice mit Spring (Boot) und versuche, Hibernate als Orm Mapper ohne XML-Konfiguration zu verwenden.Hibernate Benennungsstrategie

Ich habe es im Grunde genommen zu arbeiten, aber ich bin mit einem Konfigurationsproblem fest. Ich instanziiere LocalContainerEntityManagerFactoryBean als @Bean in einer @ Konfigurationsdatei. Ich setze hibernate.ejb.naming_strategy wie im folgenden Beispiel -> dies scheint zu funktionieren, um die Tabellen zu erstellen, wenn sie nicht existieren (Spaltennamen sind camelCase wie in meinen @Entity-Klassen), aber wenn eine Abfrage ausgeführt wird, vergisst "hibernate" "über diese Benennung Konfiguration und versucht, eine andere Art von Benennungsstrategie mit Under_score_attributes -> natürlich diese Abfragen fehlschlagen. Gibt es noch eine andere Eigenschaft, die ich einstellen muss? Oder eine andere Möglichkeit, die Eigenschaften zu konfigurieren, vorzugsweise ohne Hinzufügen einer cfg.xml oder 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(); 

Antwort

22

HibernateJpaAutoConfiguration ermöglicht die Festlegung der Benennungsstrategie (und aller anderen JPA-Eigenschaften) über lokale externe Konfiguration. Zum Beispiel in application.properties:

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

yep danke. Das sieht nach dem richtigen Weg aus! – Alex

+0

aber wo finde ich Dokumentation für diese Eigenschaften ?! – Alex

+0

und um meinen Kommentar zu beantworten: https://github.com/spring-projects/spring-boot/blob/master/docs/application.yml das ist sehr nützlich ... für alle Autokonfigurationseigenschaften – Alex

0

Haben Sie versucht, diese bestimmte Eigenschaft mit programmgesteuerten Eigenschaften zu setzen? Oder eine hibernate.properties Datei im Paket root? Oder eine JVM-Systemeigenschaft? Alle sind beschrieben here.

Aus meiner Erfahrung gibt es manchmal schwierig zu diagnostizieren Hibernate Probleme, wenn Sie darauf bestehen, keine XML verwenden (was auch meine Präferenz wäre). Wenn nichts anderes funktioniert, müssen Sie möglicherweise mindestens eine Konfigurationsdatei definieren.

-2

Ich habe jetzt die Lösung.

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

Die JpaAutoConfiguration muss ausgeschlossen werden. Trotzdem denke ich, dass dies ein Fehler sein könnte, da er normalerweise automatisch "zurückstehen" sollte, wenn ich meine eigene @Configuration verwende.

+0

Dies widerspricht eher den Zweck der Verwendung von Spring Boot. Siehe meine Antwort unten. –