Dans mon projet, le code suivant est utilisé pour gérer les transactions de mise en veille prolongée:Transaction Hibernate: quel est le but de ce code?
public void someMethod() {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
try {
session.save(something);
} catch (Exception e) {
tx.rollback();
logger.error("error", e);
throw new EJBException(e);
} finally {
try {
tx.commit();
} catch (Exception e) {
tx.rollback();
logger.error("error", e);
} finally {
session.close();
}
}
}
On m'a dit que cela est fait pour assurer que la connexion a été correctement fermée à la fin de la méthode. Cependant, je ne comprends pas le point de faire le commit/rollback dans le bloc finally
.
Y at-il une vraie raison qui justifie cette approche, ou est-il préférable de faire quelque chose de plus simple, comme cela?
public void simplerMethod() {
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
try {
session.save(something);
tx.commit();
} catch (Exception e) {
tx.rollback();
logger.error("error", e);
throw new EJBException(e);
} finally {
session.close();
}
}