结论
- 前提:A方法调用B方法时,B方法有多个修改SQL。
- 结论:同一类里事务不传递。原因如下:
- spring会扫描
@Transactional
的类和方法,并通过动态代理实现启动事务的代理方法。 - 同一个类里,A方法(没开启注解)调用B方法(开启注解)是直接调用的,它不会调用spring生成的开启事务的代理方法。
- spring会扫描
- 细节结论
(1)A方法没加@Transactional
,B方法@Transactional
:A和B在同一类中,事务无效;A和B不在同一类中,事务生效。
(2)A方法加@Transactional
,B方法没加@Transactional
:A和B在同一类中,事务生效;A和B不在同一类中,事务生效。