Hibernate 事务:这段代码有什么意义?
Hibernate transaction: what is the point of this 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();
}
}
}
他们告诉我这样做是为了确保在方法结束时连接已正确关闭。但是我不明白在 finally
块内进行提交/回滚的意义。
是否有真正的理由证明这种方法是合理的,还是做一些更简单的事情更好,就像这样?
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();
}
}
应该在尝试中,原因有二:
如果出现 HibernateException 以外的异常或错误,您将提交会话,并且您几乎肯定不想这样做
调用rollback后调用commit。我不记得 Hibernate 是否允许你这样做(通过默默地忽略回滚)但至少它是丑陋的。每个会话都应该提交或回滚。
在我的项目中,以下代码用于管理休眠事务:
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();
}
}
}
他们告诉我这样做是为了确保在方法结束时连接已正确关闭。但是我不明白在 finally
块内进行提交/回滚的意义。
是否有真正的理由证明这种方法是合理的,还是做一些更简单的事情更好,就像这样?
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();
}
}
应该在尝试中,原因有二:
如果出现 HibernateException 以外的异常或错误,您将提交会话,并且您几乎肯定不想这样做
调用rollback后调用commit。我不记得 Hibernate 是否允许你这样做(通过默默地忽略回滚)但至少它是丑陋的。每个会话都应该提交或回滚。