如果我在调用commit期间遇到Hibernate异常。在catch块中,如果使用clear,则需要回滚吗?
e.g。
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();
}
}
有什么区别,你如何决定使用哪个?
谢谢
答案 0 :(得分:6)
当发生hibernate异常时,Hibernate本身会在该会话中进行回滚。这意味着在catch语句中不需要t.rollback()
。
事件更多,当发生hibernate异常时,会话实例被破坏,不能再使用了。如果继续使用此实例,那么您将获得StaleStateException。您必须创建一个新的会话实例,而不是clear()。