Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Hibernate 5 :- org.hibernate.MappingException:Unbekannte Entität

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.