如何在单个休眠会话中 运行 两个 Spring 事务?

How to run two Spring transactions in a single hibernate Session?

我知道,有一种方法可以降低到较低级别 - 获取连接并在单个休眠会话中手动执行两个事务。

但问题是 - 如何通过@Transactional 注释调用同一会话中的第二个嵌套事务(不使用 "low level hacks" 或手写自定义事务管理)?

一些可能的代码:

@Service
public class DoubleTransaction {

@Autowired
private SessionFactory sf;

@Autowired
private NestedTeHandler nestedHandler;

@Transactional
void invokeTransaction() {
    Session cs = sf.getCurrentSession();
    Session nestedCs = nestedHandler.invokeNested(sf);
    System.out.println(cs == nestedCs);
}}

@Service
public class NestedTeHandler {

@Transactional
Session invokeNested(SessionFactory sf) {
    return sf.getCurrentSession();
}}

你也许可以用

做到这一点
@org.springframework.transaction.annotation.Transactional(propagation = Propagation.NESTED)

NestedTeHandler.invokeNested。请参阅 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html 处的文档。

另见这个问题:Differences between requires_new and nested propagation in Spring transactions