Встречается на собеседованиях • сегодня
Что делать при завершении ошибкой вложенной транзакции, если при вложенной транзакции внешняя приостанавливается
При ошибке во вложенной транзакции в Spring есть несколько вариантов:
-
По умолчанию вложенная транзакция создает savepoint. При ошибке откатывается только до этого savepoint, внешняя транзакция продолжается.
-
Если нужно откатить всю транзакцию, используйте
@Transactional(propagation = Propagation.REQUIRED)(по умолчанию) и пробросьте исключение:
java
@Transactional
public void outerMethod() {
// внешняя транзакция
try {
innerMethod(); // вложенная транзакция
} catch (Exception e) {
// транзакция будет откачена полностью
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void innerMethod() {
// код, который может упасть
throw new RuntimeException("Error");
}- Для управления поведением можно использовать
TransactionTemplateс явным указанием поведения при ошибках.
Важно: при REQUIRES_NEW внешняя транзакция приостанавливается, а при ошибке во вложенной - откатывается только она. Внешняя транзакция продолжается, если не было исключения.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы