gpt4 book ai didi

java - 嵌套 @Transactional(propagation = Propagation.REQUIRES_NEW) 是否创建新的 Hibernate session ?

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:29 26 4
gpt4 key购买 nike

当启动新事务时,在使用@Transactional(propagation = Propagation.REQUIRED)启动的当前事务中使用@Transactional(propagation = Propagation.REQUIRES_NEW),是否为新事务创建了一个新 session ?

如果上述情况成立,是否有一种方法可以仅使用一个 session 来处理所有事务?

这是一个直观的示例:

@Transactional(propagation = Propagation.REQUIRED
public void startParentTransaction() {

ChildObject childObject = newChildTransaction();
childObject.lazyLoadedAttribute();

ChildObject childObject = newChildTransaction();
childObject.lazyLoadedAttribute();
}

@Transactional(propagation = Propagation.REQUIRES_NEW
public ChildObject newChildTransaction() {

ChildObject childObject = callRepositoryOrDao();
childObject.changeState();
return childObject;
}

childOjbect.lazyLoadedAttribute() 的调用会起作用吗?或者会抛出LazyInitializationException

我们可以让所有事务发生在一个 session 中吗?

最佳答案

您已绑定(bind) Spring @Transactional 注释。

通常情况下,即使存在现有事务,Propagation.REQUIRE_NEW也会启动一个新事务。

但是如果你在本地调用newChildTransaction(只是在同一个方法中),那么Spring AOP没有机会与@Transaction注释交互。

因此,在这种情况下,newChildTransaction() 使用现有事务

关于java - 嵌套 @Transactional(propagation = Propagation.REQUIRES_NEW) 是否创建新的 Hibernate session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50177838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com