2

如果我在调用提交期间出现休眠异常。在 catch 块中,如果使用 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();
    }
}

有什么区别,您将如何决定使用哪个?

谢谢

4

1 回答 1

6

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

事件更多,当发生休眠异常时,会话实例被破坏,不能再使用。如果你继续使用这个实例,那么你会得到一个 StaleStateException。您必须创建一个新的会话实例,而不是 clear()。

于 2013-04-29T10:04:49.527 回答