代码调用结构:
@Transactional
public ReturnBo saveBase(BaseBo bo){ServiceA.dbMethodA();ServiceB.dbMethodB();ServiceC.dbMethodC(); }
异常现象:
在saveBase方法中,如果 ServiceB.dbMethodB()方法实现中出现了异常,ServiceA.dbMethodA()的数据库操作并不会回滚。
解决办法:
ServiceA.dbMethodA();ServiceB.dbMethodB();ServiceC.dbMethodC(); 方法实现上均加上@Transactional
异常原因:
@Transactional注释在saveBase()方法上,执行dbMethodA()方法时,该方法无注解,默认新开启一个事务;执行dbMethodB()方法时,该方法无注解,也默认新开启一个事务,那么两个事务是隔离的。一同加上注解,将其加入同一个事务中即可。
引用一句话总结:
被Spring的AOP增强的类,在同一个类的内部方法调用时,其被调用方法上的增强通知将不起作用。
引用一个文章:
@Transactional 无效的解决方案