Spring 具有多个事务的单个请求是否较早的事务实体变为 detouch

Spring single Request with multiple transaction does earlier transactional entity becomes detouch

在 spring 框架项目中 > 在单个请求中,我调用了 foo() 方法,它是 @Transactional,接下来调用了 bar() 方法,它也是 @Transactional。

我的问题是 foo() 中加载的实体在持久性上下文中是否仍然可用。我的观点是,事务已经结束,但持久性上下文存在科学休眠会话仍然存在科学请求尚未完成。

假设我们有 bean FooBean:

@Component
public class FooBean {
    @Transactional
    public void foo(){}

    @Transactional
    public void bar(){}
}

并且这两个方法都是从 bean BazBean:

的方法 baz 调用的
@Component
public class BazBean {
    public void baz(){
        foo();
        bar();
    }
}

如果方法 baz 已经在事务中执行,即它被标记为事务:

@Transactional
public void baz(){

BazBean标记为事务性:

@Component
@Transactional
public class BazBean {

或者作为事务标记调用堆栈上的任何方法。

foobar将在一个事务中执行。

否则foobar会在不同的交易中执行。

请注意,所有这些都是为 @Transactional 描述的,没有参数。请参阅参数 propagation for @Transactional: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Propagation.html