如果一个 @Transactional 注释方法正在同一对象实例上调用另一个 @Transactional 注释方法,会发生什么情况?

What happens if one @Transactional annotated method is calling another @Transactional annotated method on the same object instance?

我正在研究如何 Spring 处理事务,我想问的是如果一个 @Transactional 注释方法在同一个对象实例上调用另一个 @Transactional 注释方法会发生什么?

我知道事务传播默认级别是 REQUIRED 所以如果我有一个 method1() 注释 @Transactional 调用 MyObject 的实例16=](用@Transactional注释)我认为,在REQUIRED级别之后,它是在method1()创建的同一事务上执行的。

是我的推理正确还是我遗漏了什么?我不确定如果在同一个实例上调用 2 @Transactional 方法到底会发生什么。

它是如何工作的?

如果你在同一个class中从method1()调用method2(),第二个方法的@Transactional注解不会有任何效果,因为它不是通过调用代理,但直接。仅当通过代理(自动装配的 bean,或以任何其他方式注入的某些实例)调用时,方法才通过事务行为得到增强。

但一般来说,如果 method1()method2() 在不同的 class 中,并且都用 @Transactional 注释(所以使用 REQUIRED 传播),那么他们将共享在 method1().

开始的同一笔交易