相互に依存するデータベース エンティティを保存するために、他のいくつかのトランザクション メソッドを呼び出すトランザクション メソッドを作成しようとしています。呼び出しが失敗した場合、トランザクションを完全にロールバックしたい。ただし、これは観測された動作ではありません。これが私のコードです:
@Transactional(readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
public void save(EntityToBeSaved entity) {
try{
for(SubEntity sub: entity.getSubEntities()) //specifics omitted
saveSubEntity(sub); //this is transactional
}
catch (DataIntegrityViolationException e){
throw new BusinessException("Duplicate Name");
}
}
saveSubEntity
と もありPropagation.REQUIRED
ますrollobackFor = Throwable.class
が、トランザクションが 2 番目のsaveSubEntity
呼び出しで失敗すると、最初の呼び出しsubEntity
がコミットされます。