如果我想在成功执行数据库操作后使用commit(session),那么最好将它放在try或finally块中? 在这里我最终使用它,它应该在尝试吗?
public void delete( --- ) {
Session session = init();
try {
----
} catch (HibernateException e) {
rollback(session);
logger.error("delete failed", e);
throw e;
} finally {
commit(session);
close(session);
}
}
答案 0 :(得分:5)
应该在try
,原因有两个:
commit
,您将HibernateException
会话,并且您几乎肯定不想这样做commit
后,您将致电rollback
。我不记得Hibernate是否允许你这样做(通过默默地忽略回滚),但至少它是丑陋的。每个会话要么 或回滚。这里的常规解决方案是保留一个单独的boolean
变量,该变量在您成功提交时设置,并在finally
中检查,必要时回滚:
boolean committed = false;
try {
// Do stuff
commit(session);
committed = true;
} catch (HibernateException e) {
logger.error("delete failed", e);
throw e;
} finally {
if (!committed) {
rollback(session);
}
// TODO: This won't execute if rollback fails.
// Check whether that's a problem.
close(session);
}
答案 1 :(得分:0)
应该在try
。 finally
之后也会调用catch
。
答案 2 :(得分:0)
绝对应该放在try块中。 finally块通常仅用于关闭任何连接。
答案 3 :(得分:0)
你需要将它放在try块中,否则你将无法识别任何错误而你无法回滚