问题代码
service方法抛出了异常,但是没有rollback
@Transactional
public void batchInsert() throws CommonException{}
抛出的自定义异常继承于Exception
public class CommonException extends Exception{}
问题原因
@Transactional注解默认不能捕获checked异常
checked异常就是继承于Exception的异常,编辑器强制捕获或者抛出
unchecked异常就是继承于RuntimeException的异常,编译器不强制处理
解决方案
- 把CommonException改为继承RuntimeException
- 设置@Transactional(rollbackFor=CommonException.class)
发散
除了因为Exception类型原因导致的事务失败,还有可能因为以下原因:
- @Transactional修饰的方法不是public
- 本类中没有注解的方法调用有注解的方法
- 设置的引擎不支持事务