我知道,有一种方法可以降级到低级别 - 在单个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();
}}
答案 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。