Ich habe das gleiche Problem mit Hibernate 5 behoben. Es gibt ein Problem in diesem Code
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
SessionFactory sf = configuration.buildSessionFactory(sr);
Dieser Code funktioniert gut für Hibernate 4.3.5, aber derselbe Code hat das gleiche Problem für Hibernate 5.
Wenn Sie configuration.buildSessionFactory(sr) ausführen , mit Hibernate 5, Configuration verliert alle Informationen über das Mapping, die durch den Aufruf configuration.configure() abgerufen werden .
Lösung
Um das Problem zu beheben, wenn Sie die Standardkonfigurationsdateien hibernate.cfg.xml verwenden und hibernate.properties , können Sie die Sitzungsfabrik auf diese Weise erstellen (ohne ServiceRegistry )
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Eigenschaften werden geladen
Wenn Sie Eigenschaften in einer anderen Datei als hibernate.properties haben , können Sie mit StandardServiceRegistryBuilder eine Session-Factory erstellen (Jedenfalls, wenn Sie hibernate.properties haben und andere Datei, es wird beides geladen)
Eigenschaften als Ressource laden
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Sie müssen hibernate-h2.properties haben im Klassenpfad (Stamm des Quellenordners, Ressourcenordner). Sie können auch einen Pfad aus dem Stammquellordner angeben/com/github/xxx/model/hibernate-h2.properties .
Eigenschaften von einem Pfad im Dateisystem laden
File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);
Eine Beispielkonsolenanwendung, die diesen Ansatz verwendet, finden Sie hier fluent-hibernate-mysql . Es verwendet eine Hilfsklasse, um die Session-Factory aus der fluent-hibernate-Bibliothek zu erstellen .
Falsches Hibernate 5-Tutorial
Es gibt ein falsches Beispiel im Hibernate 5 Tutorial 1.1.6. Startup und Helfer . Es verwendet diesen Code
return new Configuration().configure().buildSessionFactory(
new StandardServiceRegistryBuilder().build() );
Es führt keine korrekte Konfiguration durch.