Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > Hibernate: Antipatrón sesión-por-operación

Hola a todos!

Estoy comenzando con Hibernate que lo voy a utilizar como capa de persistencia en una aplicación de escritorio con swing.

Leyendo de la página web de Hibernate me he encontrado esto:

private void createAndStoreEvent(String title, Date theDate) {
Session session = HibernateUtil.getSessionFactory().getCurrentSessio n();
session.beginTransaction();

Event theEvent = new Event();
theEvent.setTitle(title);
theEvent.setDate(theDate);
session.save(theEvent);

session.getTransaction().commit();
}


Hablando del alcance de la unidad de trabajo, ¿deberia org.hibernate.Session usarse para ejecutar una o varias operaciones de base de datos? El ejemplo anterior usa un objeto org.hibernate.Session para una unica operacion. Sin embargo, esto es pura coincidencia; el ejemplo no es lo suficientemente complejo para mostrar otra opcion. El alcance de org.hibernate.Session puede es flexible, pero nunca debes diseñar tu aplicacion para usar un nuevo objeto org.hibernate.Session por cada operacion de base de datos. Aunque esto es lo que ocurre en los siguientes ejemplos, considera que sesion-por-operación es un anti-pattern (un diseño contrario a las buenas practicas de programación).

No entiendo muy bien porque esto es una mala práctica. Si yo quiero en mi aplicación ,por ejemplo, dar de alta un cliente. ¿Por qué no debo realizar lo anterior? Entonces ¿Cómo debería hacerlo para que fuera con buenas prácticas?

Un saludo y muchas gracias por vuestro tiempo

septiembre 26, 2012 | Unregistered CommenterJavier

Entre el beginTransaction() y el commit() puedes tener varias operaciones sobre la base de datos (usualmente relacionadas entre ellas); todas quedarán en la misma transacción. Después de hacer commit() deberías de desechar el objeto Session y obtener uno nuevo.

septiembre 27, 2012 | Registered Commenterantoniovl