簡體   English   中英

Java Spring:了解@Transactional rollbackFor和事務划分

[英]Java Spring: Understanding @Transactional rollbackFor and transaction demarcation

我想以下stacktrace作為java調用:

B.method2 (annotated with a plain @Transactional)
A.method1 (annotated with a plain @Transactional)
Main.main (starting point of the call, with no current transaction)

我希望在輸入A.method1時啟動一個事務 - 當剩下A.method1時,事務將被提交(或回滾)。 我還希望在B.method2中使用相同的事務。

從B.method2中拋出RuntimeException。 這是默認情況下為rollbackFor“列出”的異常。 Exception在A.method1中被捕獲,但是當離開B.method2時它將通過@Transactional的邊界。

這是我的問題:(當前)事務是否會標記為回滾?

默認傳播模式為REQUIRED ,method2將使用針對method1啟動的事務。 在異常時,此事務將標記為回滾,因此不會將任何內容提交到數據庫。 您可能在method1之后得到UnexpectedRollbackException

這不是一個理想的行為,因為啟動事務(擁有它)的代碼應該控制回滾/提交。 我會重新組織你的代碼以避免這種可能性。

暫無
暫無

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

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