@Transactional 需要作用在public方法上才能生效
原因
- 事務代理機制:Spring透過代理機制來管理事務。當呼叫一個被@Transactional註解的public方法時,Spring會建立一個代理物件來攔截這個方法的呼叫,並在方法執行前後進行事務的管理。如果方法不是public,Spring無法透過代理機制來管理事務。
- AOP代理:Spring使用AOP(面向切面程式設計)來實現事務管理。AOP代理只能攔截public方法,因此private方法上的@Transactional註解不會被觸發。
注意 後面需要加上 回滾條件,如果不加,預設是RunTimeException才會回滾