sql >> Base de Datos >  >> RDS >> Mysql

Hibernate 5:- org.hibernate.MappingException:entidad desconocida

Solucioné el mismo problema con Hibernate 5. Hay un problema en este código

Configuration configuration = new Configuration();
configuration.configure();

ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(
    configuration.getProperties()).build();

SessionFactory sf = configuration.buildSessionFactory(sr);

Este código funciona bien para Hibernate 4.3.5, pero el mismo código tiene el mismo problema para Hibernate 5.

Cuando haces configuration.buildSessionFactory(sr) , utilizando Hibernate 5, Configuration pierde toda la información sobre el mapeo que se obtiene mediante la llamada configuration.configure() .

Solución

Para solucionar el problema, si utiliza archivos de configuración estándar hibernate.cfg.xml y hibernate.properties , puede crear la fábrica de sesiones de esta manera (sin ServiceRegistry )

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

Cargando propiedades

Si tiene propiedades en un archivo que no sea hibernate.properties , puede crear una fábrica de sesiones usando StandardServiceRegistryBuilder (de todos modos, si tiene hibernate.properties y otro archivo, se cargarán ambos)

Para cargar propiedades como un recurso

ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
    configure().loadProperties("hibernate-h2.properties").build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);  

Necesitas tener hibernate-h2.properties en la ruta de clase (raíz de la carpeta de fuentes, carpeta de recursos). También puede especificar una ruta desde la carpeta de origen raíz /com/github/xxx/model/hibernate-h2.properties .

Para cargar propiedades desde una ruta en el sistema de archivos

File propertiesPath = new File("some_path");
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().
    configure().loadProperties(propertiesPath).build();
SessionFactory sf = new Configuration().buildSessionFactory(serviceRegistry);

Puede encontrar una aplicación de consola de ejemplo usando este enfoque aquí fluent-hibernate-mysql . Utiliza una clase de utilidad para crear la fábrica de sesiones a partir de la biblioteca fluent-hibernate .

Tutorial incorrecto de Hibernate 5

Hay un ejemplo incorrecto en el tutorial de Hibernate 5 1.1.6. Inicio y ayudantes . Utiliza este código

 return new Configuration().configure().buildSessionFactory(
                new StandardServiceRegistryBuilder().build() );

No hace una configuración adecuada.