openxava / documentación / Hibernate

OpenXava soporta Hibernate desde la versión 2.0.

Configurar nuestra aplicacion para que funcione con Hibernate

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

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.