2013-03-19 202 views
0

我是新来的休眠和一般的Java EE和我想知道是否有人能告诉我,为什么这段代码返回false,即使从看数据库中,我可以看到交易实际承诺:为什么transaction.wasCommitted()返回false?

session.beginTransaction(); 
    session.saveOrUpdate(user); 
    session.getTransaction().commit(); 
    return session.getTransaction().wasCommitted(); //Always false 

谢谢!

+0

从API javadoc:检查此事务是否成功提交。 即使成功调用commit()后,此方法也可能返回false。举例来说,基于JTA的策略如果没有启动事务,就不会执行commit()调用;在那种情况下,他们也会报告wasCommitted()为false。“不知道这是否解释了什么。 – 2013-03-19 15:45:25

+1

因为提交并不一定只发生在你要求之后(也许commit()是在另一个线程中启动的),等等......总之,没有任何意义要求你刚才做的事情(这就像是问一个== 3在a = 2 + 1之后)。 – m0skit0 2013-03-19 15:47:46

+0

那么这很奇怪,为什么有一种方法不能真正起作用? – 2013-03-19 15:50:19

回答

2

wasCommitted()不必总是返回true即使提交了成功。如果交易通过本地交易(明确地)committed,它将返回true;否则为false

docs: -

wasCommitted

这种方法可以返回即使经过 成功调用提交虚假的()。作为一个例子,如果没有启动事务,那么基于JTA的策略no-op commit()会调用 ;在这种情况下,他们还会将 wasCommitted()作为false报告。

相关问题