kno*_*low 1 java hibernate exception try-catch
如果我想在成功执行数据库操作后使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
它应该在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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2012 次 |
| 最近记录: |