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