openxava / documentación / Hibernate

XHibernate e HibernatePersistenceProvider fueron quitados de OpenXava en v7.0, aunque todavía se puede usar el API de Hibernate, mira las instrucciones de migración para v7.0
OpenXava soporta Hibernate desde la versión 2.0.

Configurar nuestra aplicacion para que funcione con Hibernate (hasta v6.6.3)

Desde la v3.0 JPA, y no Hibernate, es el gestor de pesistencia por defecto, así si usas v3.0 y quieres usar Hibernate como gestor de persistencia entonces has de editar el archivo properties/xava.properties de tu proyecto, y lo dejarlo así:
# Hibernate
persistenceProviderClass=org.openxava.model.impl.HibernatePersistenceProvider
mapFacadeAsEJB=false
A partir de ahora, tu aplicación usará Hibernate en lugar de EJB3 JPA para manejar la persistencia de los objetos.

Usando Hibernate en nuestro código (hasta v6.6.3)

Podemos usar las APIs de Hibernate en cualquier parte de una aplicación OpenXava, esto es, dentro de calculadores, acciones, filtros, etc.
Para facilitar el uso de Hibernate OpenXava provee la clase XHibernate. Por ejemplo, si queremos guardar un objeto en la base de datos usando Hibernate, la manera típica sería:
Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
sesion.beginTransaction();
Cliente cliente = ... ;
sesion.save(cliente);
sesion.getTransaction().commit();
sesion.close();
 
Pero, dentro de OpenXava y usando XHibernate podemos escribir:
Cliente cliente = ... ;
XHibernate.getSession().save(cliente);
 
Nada más.
La primera vez que llamamos a XHibernate.getSession() una sesión es creada y asignada al hilo actual y una transacción es creada también; la siguiente vez que lo llamemos, la misma sesión de Hibernate es usada. Al final del ciclo completo de la ejecución de la acción, OpenXava confirma automáticamente la transacción y cierra la sesión. Además, XHibernate.getSession() funciona bien dentro y fuera de un entorno CMT.
Podemos, opcionalmente, confirmar la transacción en cualquier momento llamando a XHibernate.commit(), si después de esto llamamos a XHibernate.getSession() una nueva sesión y transacción son creadas.
Podemos ver más acerca de esto consultando el API de org.openxava.hibernate.XHibernate.