質問: new ArrayList<>(); iList.forEach(i -> i.setUsedFlag(true); tList.add(t); }); iDao.batchUpdate(tempList); sDao.update(sDto); throw new RuntimeException(); } ```
回答: ``` @Transactional public void updateExecute(List iList,Store sDto) { update(iList,sDto); } private void update(List iList,Store sDto) { List tempList = new ArrayList<>(); iList.forEach(i -> i.setUsedFlag(true); tList.add(t); }); iDao.batchUpdate(tempList); sDao.update(sDto); throw new RuntimeException(); } ``` 分かりやすく言うと、上記のようにすると@Transactionalが発動しました。 ポイントはRuntimeExceptionを受ける場所が@Transactionalであるということです。 元々はRuntimeExceptionを受ける場所が@TransactionalのないControllerのメソッドだったのに対し、 変更後はRuntimeExceptionを受ける場所が@Transactionalの付与されたメソッドになっています。