gpt4 book ai didi

java - 如果使用clear代替,Hibernate异常后是否需要回滚

转载 作者:行者123 更新时间:2023-12-02 09:41:08 27 4
gpt4 key购买 nike

如果我在调用提交期间遇到 Hibernate 异常。在catch block 中,如果使用clear代替,是否需要回滚?

例如

EntityTransaction t = em.getTransaction();
t.begin();
try {
...
t.commit();
} catch (StaleObjectStateException ex) {
... // rollback needed?
} finally {
t.clear();
}

而不是

EntityTransaction t = em.getTransaction();
t.begin();
try {
...
t.commit();
} catch (StaleObjectStateException ex) {
if (t.isActive()) {
t.rollback();
}
}

它们有什么区别?您如何决定使用哪个?

谢谢

最佳答案

当发生 Hibernate 异常时,Hibernate 本身会在该 session 中进行回滚。这意味着 catch 语句中不需要 t.rollback()

更重要的是,当发生hibernate异常时,session实例就被破坏了,不能再使用了。如果您继续使用此实例,那么您将收到 StaleStateException。您必须创建一个新的 session 实例,而不是clear()。

关于java - 如果使用clear代替,Hibernate异常后是否需要回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16270083/

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