1

相互に依存するデータベース エンティティを保存するために、他のいくつかのトランザクション メソッドを呼び出すトランザクション メソッドを作成しようとしています。呼び出しが失敗した場合、トランザクションを完全にロールバックしたい。ただし、これは観測された動作ではありません。これが私のコードです:

@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がコミットされます。

4

2 に答える 2