Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多个事务的Spring单请求不会使早期的事务实体变为detouch_Spring_Entity_Transactional - Fatal编程技术网

具有多个事务的Spring单请求不会使早期的事务实体变为detouch

具有多个事务的Spring单请求不会使早期的事务实体变为detouch,spring,entity,transactional,Spring,Entity,Transactional,在spring framework project>中,我在一个请求中调用了@Transactional的foo()方法,然后调用了@Transactional的bar()方法 我的问题是foo()中加载的实体在持久性上下文中是否仍然可用。我的观点是,事务已结束,但持久性上下文已存在科学hibernate会话仍处于活动状态科学请求尚未完成。假设我们有bean FooBean: 这两个方法都是从bean BazBean的方法baz调用的: 如果方法baz已在事务中执行,即标记为事务: @Trans

在spring framework project>中,我在一个请求中调用了@Transactional的
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()后死亡-这是吗?是的,如果您没有在外部某处保存对它们的引用。