如果使用clear,则在Hibernate异常后需要回滚

use*_*188 2 java hibernate exception rollback

如果在调用commit期间我有Hibernate异常.在catch块中,如果使用clear,则需要回滚吗?

例如

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

代替

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

有什么区别,你会如何决定使用哪个?

谢谢

Joh*_*nna 6

当发生hibernate异常时,Hibernate本身会在该会话中进行回滚.这意味着t.rollback()在catch语句中没有必要.

事件更多,当发生hibernate异常时,会话实例被破坏,不能再使用了.如果继续使用此实例,那么您将获得StaleStateException.您必须创建一个新的会话实例,而不是clear().