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.