[英]Transaction not committed at end of method
我有兩種使用事務性注釋的方法(它們處於同一級別-具有相同的父事務,如下圖所示):
@javax.transaction.Transactional
persist() {
persistEntities1()
persistEntities2()
}
@javax.transaction.Transactional(value = Transactional.TxType.REQUIRES_NEW)
persistEntities1() {}
@javax.transaction.Transactional(value = Transactional.TxType.REQUIRES_NEW)
persistEntities2() {}
在persistentEntities1中,一切正常,在EntityManager實例上有一個合並調用。 在persistEntities2中,存在未捕獲的異常。
問題:應在persistentEntities1中保留的實體不保留 。
為什么會這樣呢? 我認為REQUIRES_NEW確保在方法結束時提交事務。
我正在使用Wildfly 8.2。
解決方案是將兩種方法persistEntities1
和persistEntities2
移到單獨的bean中。 現在,行為符合預期。
如果子方法與父方法位於同一個bean中,則該特定的jpa實現似乎會忽略子事務注釋。
發生這種情況的原因是,在執行persistEntities1()
時引發了RuntimeException
。
了解為什么事務在RuntimeException而不是SQLException上回滾 。
是否已捕獲和處理異常似乎無關緊要,事務上下文仍然設置為“僅回滾”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.