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.