使用位置 :@Transactional事務註解 既可以寫在方法上也可以寫在類上
@Transactional(rollbackFor = Exception.class)
使用: 1.默認值爲UncheckedException,包括了RuntimeException和Error.
2.當我們直接使用@Transactional
不指定rollbackFor
時,Exception及其子類都不會觸發回滾
詳情細節參考大佬: https://zhuanlan.zhihu.com/p/38208248 https://www.cnblogs.com/clwydjgs/p/9317849.html
下面情況會回滾:
1.如果沒有加@Transactional註解,那麼這兩個操作就不在一個事務裏面,不具有原子性。如果deleteAll之後拋異常,那麼就會導致只刪除不新增。
2.加了@Transactional之後,這兩個動作在一個事務裏頭,具有原子性,要麼全部成功,要麼全部失敗。如果deleteAll之後拋異常,則事務回滾,恢復原先被刪除的數據。
@Transactional
public void deleteAllAndAddOneTransactional(Customer customer) {
customerRepository.deleteAll();
if ("Yang".equals(customer.getFirstName())) {
throw new RuntimeException();
}
customerRepository.save(customer);
}
一個沒有加@Transactional註解的方法,去調用一個加了@Transactional的方法,出現異常不會回滾