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.