2013-03-19 246 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報告。

相關問題