2015-12-06 26 views
15

Sono un po 'confuso riguardo al supporto di SpringBoot (1.3.0) di Hibernate5. Il riferimento elenca una dipendenza da ibernazione 4.3.11.Final ma elenca anche una dipendenza da SpringFramework 4.2.3 che include il supporto di Hibernate5.SpringBoot 1.3.0 supporta ibernazione 5?

Si tratta semplicemente di aggiungere le dipendenze aggiuntive di Hibernate5 per sovrascrivere i pacchetti di avvio? Qualcuno può chiarire per me?

risposta

16

È possibile utilizzare Hibernate 4.3 o Hibernate 5.0 con Spring Boot 1.3. Come hai osservato, Hibernate 4.3.x è la versione predefinita.

Per utilizzare Hibernate 5.0, è necessario ignorare la proprietà hibernate.version nella gestione delle dipendenze di Spring Boot. Supponendo che si sta utilizzando Maven:

<properties> 
    <hibernate.version>5.0.5.Final</hibernate.version> 
</properties> 

Quando si utilizza Hibernate 5.0, quella grande differenza da usando Hibernate 4.3.x è che si perde strategia di denominazione personalizzata di primavera Boot. A causa di una modifica sostanziale fatto in Hibernate 5.0, verrà visualizzato un avviso come questo registrato all'avvio:

2015-12-07 10:04:56.911 WARN 81371 --- [   main] org.hibernate.orm.deprecation   : HHH90000006: Attempted to specify unsupported NamingStrategy via setting [hibernate.ejb.naming_strategy]; NamingStrategy has been removed in favor of the split ImplicitNamingStrategy and PhysicalNamingStrategy; use [hibernate.implicit_naming_strategy] or [hibernate.physical_naming_strategy], respectively, instead. 

Se non ti piace di default di Hibernate 5, è possibile specificare una strategia di denominazione implicita personalizzata o fisico nella primavera del Boot di application.properties utilizzando rispettivamente le proprietà spring.jpa.properties.hibernate.implicit_naming_strategy e spring.jpa.properties.hibernate.physical_naming_strategy.

+2

Grazie per la risposta dettagliata, tuttavia scusate la mia ignoranza, potresti approfondire come posso migrare in ibernazione 5 senza rompere nulla che già esiste? Esiste una strategia di denominazione che sostituisce quella attualmente utilizzata in "org.hibernate.cfg.ImprovedNamingStrategy"? O forse è una decisione migliore per trattenere Hibernate 5 al momento fino alla migrazione ufficiale di Spring? – prettyvoid

6

Aggiornamento luglio 2016: Con il rilascio di Spring Boot 1.4.0 il valore predefinito Hibernate 5 is used as the default JPA persistence provider.


C'è una ticket about migrating to Hibernate 5 da qualche tempo - sembra che la battuta d'arresto principale è certa incompatibilità nome strategia. Attualmente, il ticket è attualmente programmato per 1.4.0

+0

1.4.0 è ora rilasciato con Hibernate 5 come provider di persistenza JPA predefinito. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4-Release-Notes –

-1

Grazie ragazzi! dopo molte prove, questa soluzione ha funzionato per me come un incantesimo! Ho implementato una strategia personalizzata e le ho impostate in application.yml come mostrato di seguito:

jpa: 
    database: MYSQL 
    database-platform: org.hibernate.dialect.MySQL5Dialect 
    properties: 
     hibernate: 
      implicit_naming_strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl 
      physical_naming_strategy: com.quicken.ups.entities.utils.DBFieldNamingStrategy 
+0

Dove trovo il codice per: com.quicken.ups.entities.utils.DBFieldNamingStrategy? –

+0

Sì Si prega di includere l'esempio operativo completo. – Decoded