Я пытаюсь создать транзакционный метод, который вызывает несколько других транзакционных методов, чтобы сохранить некоторые взаимозависимые сущности db. Я хочу, чтобы транзакция полностью откатилась, если какой-либо вызов завершился неудачно. Однако это не наблюдаемое поведение. Вот мой код:вызов транзакции транзакции Hibernate в транзакционном методе отката
@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
является поручен.
Очень удивительно. Не могли бы вы показать код 'saveSubEntity()'? Кроме того, readOnly = false и распространение = REQUIRED являются значениями по умолчанию. Вы можете удалить эти атрибуты. –