私はSpringの公式ドキュメントを読みました
@Transactional(Propagation.REQUIRED)
注釈がありますが、まだ疑問があります。それがどのように動作すると私が考えるかについての例を示します。
最初のサービス
public class MyServiceImpl implements MyService{
@AutoWired
private OtherService otherService;
@Transactional(Propagation.REQUIRED)
public void saveItem(Item item){.....}
@Transactional(Propagation.REQUIRED)
public void updateItem(Item item){....}
}
@Transactional(Propagation.REQUIRED)
public void deleteItem(Item item){
otherService.checkItem(item);
...........
}
}
セカンドサービス
public class OtherServiceImpl implements OtherService {
@Transactional(Propagation.REQUIRED)
public void checkItem(Item item){.....}
}
Spring Controller から MyServiceImpl クラスを呼び出す:
を 1 回呼び出すと
saveItem()
、新しい物理トランザクションと論理トランザクションが作成されますよね?コントローラーからこのサービスを 2 回呼び出した場合、1 回目と 2 回目で、Spring はメソッドごとに 2 つの物理的な異なるトランザクションを作成しますよね
saveItem()
?updateItem()
を呼び出すと
deleteItem()
、deleteItem が呼び出されたときにトランザクションが開かれるため、1 つの物理トランザクションのみが作成されますが、このメソッドからの内部呼び出しotherService.checkItem()
は最初の物理トランザクションを再利用しますよね?