Mysql
 sql >> Database >  >> RDS >> Mysql

Hibernate 5:- org.hibernate.MappingException:entità sconosciuta

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.