Ho risolto lo stesso problema con Hibernate 5. Si è verificato un problema in questo codice
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Questo codice funziona correttamente per Hibernate 4.3.5, ma lo stesso codice presenta lo stesso problema per Hibernate 5.
Quando esegui configuration.buildSessionFactory(sr)
, utilizzando Hibernate 5, Configuration
perde tutte le informazioni sulla mappatura che ottiene tramite la chiamata configuration.configure()
.
Soluzione
Per risolvere il problema, se utilizzi file di configurazione standard hibernate.cfg.xml
e hibernate.properties
, puoi creare la sessione factory in questo modo (senza ServiceRegistry
)
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Caricamento delle proprietà
Se hai proprietà in un file diverso da hibernate.properties
, puoi creare una session factory usando StandardServiceRegistryBuilder
(comunque, se hai hibernate.properties
e un altro file, verranno caricati entrambi)
Per caricare le proprietà come risorsa
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Devi avere hibernate-h2.properties
nel percorso della classe (radice della cartella delle fonti, cartella delle risorse). Puoi specificare un percorso anche dalla cartella di origine radice/com/github/xxx/model/hibernate-h2.properties
.
Per caricare le proprietà da un percorso nel file system
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Puoi trovare un'applicazione console di esempio utilizzando questo approccio qui fluent-hibernate-mysql . Utilizza una classe di utilità per creare la session factory dalla libreriafluent-hibernate .
Tutorial di Hibernate 5 errato
C'è un esempio errato nel tutorial di Hibernate 5 1.1.6. Startup e aiutanti . Utilizza questo codice
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Non esegue una configurazione corretta.