Cuando actualicé la versión de Hibernate de 3.6.8 a 4.0.0, recibí una advertencia sobre el método obsoleto buildSessionFactory()
en esta línea:
private static final SessionFactory sessionFactory =
new Configuration().configure().buildSessionFactory();
el Javadoc recomienda usar otro método
buildSessionFactory(ServiceRegistry serviceRegistry)
pero en la documentación encontré una variante obsoleta :(
¿Me pueden ayudar con este pequeño malentendido?
java
hibernate
configuration
deprecated
bootstrapping
agresivo
fuente
fuente
Respuestas:
Sí, está en desuso. Reemplace su SessionFactory con lo siguiente:
En Hibernate 4.0, 4.1, 4.2
En Hibernate 4.3, ServiceRegistryBuilder está en desuso . Use lo siguiente en su lugar.
fuente
Sí, está en desuso. http://docs.jboss.org/hibernate/core/4.0/javadocs/org/hibernate/cfg/Configuration.html#buildSessionFactory () le dice específicamente que use el otro método que encontró en su lugar (
buildSessionFactory(ServiceRegistry serviceRegistry)
), así que úselo.La documentación se copia de una versión a otra, y probablemente aún no se haya actualizado (no reescriben el manual con cada versión), así que confíe en los Javadocs.
Los detalles de este cambio se pueden ver en:
Algunas referencias adicionales:
fuente
o
fuente
Código verificado para trabajar en Hibernate 4.3.0. Tenga en cuenta que puede eliminar el parámetro de nombre de archivo XML o proporcionar su propia ruta allí. Esto es similar a (pero los errores tipográficos corregidos) otras publicaciones aquí, pero esta es correcta.
fuente
Es tan simple como esto: los documentos de JBoss no están 100% perfectamente bien mantenidos. Vaya con lo que dice el JavaDoc :
buildSessionFactory(ServiceRegistry serviceRegistry)
.fuente
Una mejor manera de crear un objeto SessionFactory en la última versión de hibernate 4.3.0 en adelante es la siguiente:
fuente
No es inusual encontrar discrepancias entre las diferentes versiones de la documentación. La mayoría de los desarrolladores ven la documentación como una tarea rutinaria y tienden a posponerla.
Como regla general, si el javadoc dice una cosa y alguna documentación que no sea javadoc lo contradice, lo más probable es que el javadoc sea más preciso. Es más probable que los programadores mantengan el javadoc actualizado con los cambios en el código ... porque la "fuente" del javadoc está en el mismo archivo que el código.
En el caso de las
@deprecated
etiquetas, es una certeza virtual de que el javadoc es más preciso. Los desarrolladores desprecian las cosas después de una cuidadosa consideración ... y (en términos generales) no las desprecian.fuente
System.getenv(String)
bugs.sun.com/bugdatabase/view_bug.do?bug_id=4199068Configuration.buildSessionFactory()
;)Si está utilizando Hibernate 5.2 y superior, puede usar esto:
fuente
TL; DR
Sí lo es. Hay mejores formas de arrancar Hibernate, como las siguientes.
Bootstrap nativo de Hibernate
El
Configuration
objeto heredado es menos poderoso que usar elBootstrapServiceRegistryBuilder
, introducido desde Hibernate 4:Bootstrap JPA
También puede iniciar Hibernate con JPA:
De esta manera, estás construyendo el en
EntityManagerFactory
lugar de aSessionFactory
. Sin embargo, también seSessionFactory
extiendeEntityManagerFactory, so the actual object that's built is a
SessionFactoryImpl`.Conclusión
Estos dos métodos de arranque afectan el comportamiento de Hibernate. Cuando se usa el bootstrap nativo, Hibernate se comporta en el modo heredado, que es anterior a JPA.
Al iniciar usando JPA, Hibernate se comportará de acuerdo con la especificación JPA.
Existen varias diferencias entre estos dos modos:
EntityNotFoundException
, por lo tanto, exige una verificación de DB.fuente
fuente
StandardServiceRegistryBuilder
NO está en desuso.public void sampleConnection () lanza Exception {
fuente
Edité el método creado por batbaatar arriba para que acepte el objeto de configuración como parámetro:
En la clase principal hice:
fuente
En Hibernate 4.2.2
fuente
fuente
Aquí hay muchas API en desuso en el marco central de hibernación.
Hemos creado la fábrica de sesiones de la siguiente manera:
SessionFactory sessionFactory = nueva Configuración (). Configure (). BuildSessionFactory ();
El método buildSessionFactory está en desuso de la versión hibernate 4 y se reemplaza con la nueva API. Si está utilizando la hibernación 4.3.0 y superior, su código debe ser:
Configuración de la configuración = nueva Configuración (). Configure ();
StandardServiceRegistryBuilder Builder = nuevo StandardServiceRegistryBuilder (). ApplySettings (configuration.getProperties ());
SessionFactory factory = configuration.buildSessionFactory (builder.build ());
La clase ServiceRegistryBuilder se reemplaza por StandardServiceRegistryBuilder de 4.3.0. Parece que habrá muchos cambios en la versión 5.0. Todavía no hay mucha claridad sobre las API obsoletas y las alternativas adecuadas para usar. Cada versión incremental viene con una API más obsoleta, están en camino de ajustar el marco central para la versión 5.0.
fuente
En
hibernate 5.3.1
, puedes probar esto:fuente
Si hay alguien aquí después de actualizar a 5.1, así es como funciona
en lugar de lo siguiente en hibernate 4.3
fuente
Solo importa el siguiente paquete,
fuente