簡體   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