Встречается на собеседованиях • сегодня

В каких случаях Transactional не откатит транзакцию назад

Transactional не откатит транзакцию в следующих случаях:

  1. Исключения, не отмеченные @Transactional(rollbackFor=...) - по умолчанию откат только на unchecked исключениях (RuntimeException и его наследники)
java
@Transactional
public void method() throws Exception {
    throw new Exception(); // не откатит
}
  1. Метод вызван из этого же класса - Spring AOP прокси не перехватывает внутренние вызовы
java
public class Service {
    @Transactional
    public void outer() {
        inner(); // транзакция не работает
    }
    
    @Transactional
    public void inner() {}
}
  1. Транзакция помечена как PROPAGATION_NEVER или PROPAGATION_NOT_SUPPORTED

  2. Используется try-catch с подавлением исключения

java
@Transactional
public void method() {
    try {
        // код с ошибкой
    } catch (Exception e) {
        // исключение подавлено - отката нет
    }
}
  1. Транзакция уже помечена как readOnly=true - для некоторых операций изменения
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы