簡體   English   中英

在方法結束時未提交事務

[英]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。

解決方案是將兩種方法persistEntities1persistEntities2移到單獨的bean中。 現在,行為符合預期。

如果子方法與父方法位於同一個bean中,則該特定的jpa實現似乎會忽略子事務注釋。

發生這種情況的原因是,在執行persistEntities1()時引發了RuntimeException

了解為什么事務在RuntimeException而不是SQLException上回滾

是否已捕獲和處理異常似乎無關緊要,事務上下文仍然設置為“僅回滾”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM