Un transacción es un conjunto de órdenes que se ejecutan formando un unidad de trabajo, en forma indivisible o atómica.
Para la gestión de transacciones en Hibernate, no se produce bloqueo de objetos en la memoria. La aplicación puede esperar el comportamiento definido por el nivel de aislamiento de sus transacciones de las bases de datos. Gracias a la Session
, la cual también es un caché con alcance de transacción. Para realizar con éxito la gestión de transacciones, ésta se van a basar en el uso del objeto Session
.
El objeto Session
se obtiene a partir de un objeto SessionFactory
,invocando el método openSession
. Un objeto SessionFactory
representa una configuración particular de un conjunto de metadatos de mapping objeto/relaciona.
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try
{
tx = session.beginTransaction();
// Utilizar la Session para saveOrUpdate/get/delete/...tx.commit();
} catch (Exception e)
{
if (tx != null)
{
tx.rollback();
throw e;
}
} finally {
session.close();
}// Al finalizar la aplicación ...HibernateUtil.shutdown( );
Cuando se crea el objeto Session
, se le asigna la conexión de la base de datos que va a utilizar. Una vez obtenido el objeto Session
, se crea una nueva unidad de trabajo ( Transaction) utilizando el método beginTransaction
. Dentro del contexto de la transacción creada, se pueden invocarlos métodos de gestión de persistencia proporcionados por el objeto Session
, para recuperar, añadir, eliminar o modificar el estado de instancias de clases persistentes. También se pueden realizar consultas. Si las operaciones de persistencia no han producido ninguna excepción, se invoca el método commit
de la unidad de trabajo para confirmar los cambios realizados. En caso contrario, se realiza un rollback
para deshacer los cambios producidos. Sobre un mismo objeto Session pueden crearse varias unidades de trabajo. Finalmente se cierra el objeto Session
invocando su método close
.