繁体   English   中英

当@Transactional(readonly=true) 方法调用@Transactional(readonly=false) 方法时会发生什么,反之亦然?

[英]What happens when @Transactional(readonly=true) method calls @Transactional(readonly=false) method and vice versa?

我想知道,当@Transactional(readonly=true) 方法调用@Transactional(readonly=false) 方法时会发生什么? 用传播= Propagation.REQUIRED(在外部事务范围内)谈论情况。

public class ServiceA {

   ServiceB serviceB;


   @Transactional(readonly = true)
   public void readOnly() {
       
      // some reading from repo

      serviceB.write()
   }

}


public class ServiceB {

   @Transactional
   public void write() {
     
     // some write to repo

   }

}

对于相反的情况,同样的问题,如果@Transactional(readonly=false) 方法调用@Transactional(readonly=true) 方法会发生什么? 我想对于最后一种情况,它只会考虑外部 scope 中的 @Transactional(readonly=false)。

readOnly=true调用readOnly=false不起作用,因为上一个事务继续进行。

这是因为之前的事务正在继续。

如果你想让它工作,你必须让它开始一个新的事务。 样本:

public class ServiceB {

   @Transactional(propagation = Propagation.REQUIRES_NEW)
   public void write() {     
     // some write to repo ..
   }
}

在这种情况下,它将起作用,因为将启动一个新的事务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM