无效原因:
- 方法没有被
public
修饰,也就是this
调用 - 方法中有
try{} catch{}
@Transactional
注解 默认是发生RuntimeException
时回滚,如果发生了其他异常是不会回滚的。比如:IOException、NullPointException、ArithmeticException
等等
解决方案:
- 方法改为被
public
修饰 - 去掉方法中
try{} catch{}
,如果必须要使用try{} catch{}
的话,可以在catch{}
中加上手动提交事务TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
- 修改为
@Transactional(rollbackFor = Exception.class)