Код: Выделить всё
@Service
public class MyService {
@Transactional(rollbackFor = Exception.class)
public void parentMethod() {
childMethod1();
childMethod2();
}
@Transactional(rollbackFor = Exception.class)
private void childMethod1() {
// Creates some records that will be updated in childMethod2
}
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
private void childMethod2() {
// Updates records created in childMethod1
}
}
Чего я пытаюсь достичь:
Код: Выделить всё
childMethod1Необходимо фиксировать записи аудита Envers для обновлений, сделанных в childMethod2 записей, созданных в childMethod1
Если childMethod2 не удалось, childMethod1 также следует откатить.
Что я пробовал:
Добавлено распространение = Распространение.REQUIRES_NEW на childMethod2 в надежде, что он создаст новую транзакцию и захватит записи аудита, но это не решило проблему.Рассмотрено с использованием REQUIRES_NEW< /code> для обоих дочерних методов и вручную обрабатывать откат childMethod1 в случае сбоя childMethod2, но этот подход не обеспечивает истинную атомарность, поэтому он не является жизнеспособное решение
Транзакции работают правильно с точки зрения изоляции, но записи аудита по-прежнему не создаются.
Текущее поведение:
Транзакции, кажется, работают, но я не получаю записи аудита Envers для обновлений, сделанных в childMethod2
Поведение отката работает должным образомКак я могу гарантировать, что Envers фиксирует записи аудита между этими вложенные транзакции?
Будем благодарны за любую помощь!
Подробнее здесь: https://stackoverflow.com/questions/792 ... ansactions
Мобильная версия