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

yvgpqqbh  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(458)

我想知道,当@transactional(readonly=true)方法调用@transactional(readonly=false)方法时会发生什么?使用propagation=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)方法会发生什么?我想对于最后一种情况,它只考虑外部作用域中的@transactional(readonly=false)。

pftdvrlh

pftdvrlh1#

打电话 readOnly=falsereadOnly=true 由于上一个事务继续,因此不起作用。
这是因为上一个事务正在继续。
如果你想让它工作,你必须让它开始一个新的事务。样品:

public class ServiceB {

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

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

相关问题