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 {
或者作为事务标记调用堆栈上的任何方法。
比foo和bar将在一个事务中执行。
否则foo和bar会在不同的交易中执行。
请注意,所有这些都是为 @Transactional 描述的,没有参数。请参阅参数 propagation for @Transactional: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Propagation.html
在 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 {
或者作为事务标记调用堆栈上的任何方法。
比foo和bar将在一个事务中执行。
否则foo和bar会在不同的交易中执行。
请注意,所有这些都是为 @Transactional 描述的,没有参数。请参阅参数 propagation for @Transactional: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Propagation.html