gpt4 book ai didi

java - 我们应该在哪里使用 commit(session),在 try 还是 finally 中?

转载 作者:行者123 更新时间:2023-11-29 07:42:24 25 4
gpt4 key购买 nike

如果我想在成功执行数据库操作后使用 commit(session),将它放在 try 或 finally block 中哪个更好?这里我终于用到了,应该试试吧?

public void delete( --- ) {
Session session = init();
try {
----
} catch (HibernateException e) {
rollback(session);
logger.error("delete failed", e);
throw e;
} finally {
commit(session);
close(session);
}
}

最佳答案

它应该在try中,原因有二:

  • 如果发生其他 HibernateException 异常或错误,您将提交 session ,而您几乎肯定不想这样做那个
  • 您将在调用rollback 之后调用commit。我不记得 Hibernate 是否允许你这样做(通过默默地忽略回滚)但至少它是丑陋的。每个 session 都应该提交回滚。

这里的正常解决方案是保留一个单独的 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);
}

关于java - 我们应该在哪里使用 commit(session),在 try 还是 finally 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28825893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com