链式事务 [=10th=] 类 spring

Chained transactional api calls spring

我有一个问题,我的交易没有被提交

我的服务 class 是 @Transactional 注释的

@Transactional
class MyService{
   public void find();
   public void return(); //Return will only happen if find is updated in DB
   public void cancel(){
          find();
          return();
   }
}

我的 class 有 3 个 api 它们在内部调用各自的 Dao,并且 Dao as 没有被注释为 Transactional。

现在,如果我调用取消,我将首先调用查找,然后调用 return()。但是 return() 需要 find() 需要用 FIND 状态更新数据库。

但是,由于在取消 returned 之前所有操作都发生在同一个事务上,因此事务未提交。有人可以帮助我了解这种情况并解决它吗。

我不知道在这种情况下如何使用传播。

提前致谢..

摘自 Spring 交易文档 (Spring Doc)

In proxy mode (which is the default), only external method calls coming in through the proxy are intercepted. This means that self-invocation, in effect, a method within the target object calling another method of the target object, will not lead to an actual transaction at runtime even if the invoked method is marked with @Transactional.

在 cancel() 方法中对 find() 和 return() 的调用不是事务性的。如果您希望它是事务性的,您可以执行 applicationContext.getBean(this.getClass()); 之类的操作并调用您的方法。