@Transactional不生效的几种情况
现象 方法上加了 @Transactional,但数据库操作报错后没有回滚。 代码如下: @Service public class OrderService { @Transactional public void createOrder() { orderMapper.insert(...); int a = 1 0; } } 执行后数据已插入,没有回滚。 排查一:方法内部调用 调用方式: @Service public class OrderService { public void test() { this.createOrder(); } @Transactional public void createOrder() { orderMapper.insert(...); int a = 1 0; } } 同类内部调用不会走代理,事务不生效。 需要通过代理对象调用。 排查二:异常类型不对 如果捕获异常: @Transactional public void createOrder() { try { orderMapper.insert(...); int a = 1 0; } catch (Exception e) { System.out.println(异常); } } 异常被捕获,事务不会回滚。 ...