具有多个事务的Spring单请求不会使早期的事务实体变为detouch
在spring framework project>中,我在一个请求中调用了@Transactional的具有多个事务的Spring单请求不会使早期的事务实体变为detouch,spring,entity,transactional,Spring,Entity,Transactional,在spring framework project>中,我在一个请求中调用了@Transactional的foo()方法,然后调用了@Transactional的bar()方法 我的问题是foo()中加载的实体在持久性上下文中是否仍然可用。我的观点是,事务已结束,但持久性上下文已存在科学hibernate会话仍处于活动状态科学请求尚未完成。假设我们有bean FooBean: 这两个方法都是从bean BazBean的方法baz调用的: 如果方法baz已在事务中执行,即标记为事务: @Trans
foo()
方法,然后调用了@Transactional的bar()
方法
我的问题是foo()
中加载的实体在持久性上下文中是否仍然可用。我的观点是,事务已结束,但持久性上下文已存在科学hibernate会话仍处于活动状态科学请求尚未完成。假设我们有bean FooBean:
这两个方法都是从bean BazBean的方法baz调用的:
如果方法baz已在事务中执行,即标记为事务:
@Transactional
public void baz(){
@Component
@Transactional
public class BazBean {
或标记为事务性:
@Transactional
public void baz(){
@Component
@Transactional
public class BazBean {
或者作为调用堆栈上的任何方法标记
而foo和bar将在一个事务中执行
否则,foo和bar将在不同的事务中执行
请注意,这一切都是为@Transactional描述的,没有参数。请参阅@Transactional:的参数传播,感谢您编写了我应该做的图片。因此,在baz()执行完成后(http请求尚未完成),加载到foo()和bar()中的实体是否仍处于持久性上下文或hibernate会话中?持久性上下文仅在一个事务期间有效。什么意思-在foo()中加载的实体将在退出foo()等bar()后死亡-这是吗?是的,如果您没有在外部某处保存对它们的引用。