propagation
一共有以下幾種選項:
1. REQUIRED(默認): 使用當前的事務,如果當前沒有事務,則自己新建一個事務,子方法必須運行在一個事務中;如果當前存在事務,則加入這個事務,成為一個整體
2. SUPPORTS: 如果當前有事務,則使用事務;如果當前沒有事務,則不使用事務。主要用於查詢,因為查詢不需要事務。
3. MANDATORY: 強制要求必須存在一個事務,如果不存在,則拋出異常
4. REQUIRES_NEW: 如果當前有事務,則掛起該事務,並自己創建一個新的事務給自己使用;如果當前沒有事務,則同 REQUIRED
5. NOT_SUPPORTED: 如果當前有事務,則把事務掛起,自己不適用事務去執行數據庫操作
6. NERVER: 如果當前有事務存在,則拋出異常
7. NESTED: 如果當前有事務,則開啟子事務(嵌套事務),嵌套事務是獨立提交或者回滾;如果當前沒有事務,則同 REQUIRED
但是如果主事務提交,則會攜帶子事務一起提交。
如果主事務回滾,則子事務會一起回滾。相反,子事務異常,則父事務可以回滾或不回滾。