如何在单个hibernate Session中运行两个Spring事务?

时间:2018-04-04 22:53:00

标签: java spring hibernate jta

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

但问题是 - 如何通过@Transactional注释在同一个Session中调用第二个嵌套事务(不使用“低级别黑客”或手工自定义事务管理)?

一些可能的代码:

@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();
}}

1 个答案:

答案 0 :(得分:0)

您可以使用

执行此操作
@org.springframework.transaction.annotation.Transactional(propagation = Propagation.NESTED)
<{1>} 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