@Transaction注解不生效
-
异常类型不符
Spring的默认的事务规则是遇到运行异常(RuntimeException)和程序错误(Error)才会回滚。如果想针对非检测异常进行事务回滚,可以在@Transactional 注解里使用rollbackFor 属性明确指定异常。
解决:
@Transactional(rollbackFor = Exception.class)
-
捕捉异常,导致失败
使用try{}catch后,会以为你会自行处理,所以不会回滚。
简单点就是它检测到了给它的异常才生效,现在你自己捕捉了异常,所以没生效。
解决:
直接抛出异常或者不使用try...catch
-
方法不是public
不是public 的方法不会生效
解决:
修改使用了@Transactional注解的方法访问权限级别为public
-
同一类中方法调用
方法A、方法B均在同一个类中,A方法有@Transactional注解,B方法没有。B调用了A,导致事务失效。
解决:
同时加上@Transactional注解