Вступить в клуб →
средняявопросPostgreSQL, JPA и производительность запросов

Checked-исключение внутри @Transactional и откат

Метод сохраняет документ и выгружает файл в объектное хранилище:

@Transactional
public void process(Doc doc) throws IOException {
    docRepository.save(doc);          // вставка строки в PostgreSQL
    storage.upload(doc);              // бросает IOException при недоступности хранилища
}

Хранилище недоступно, upload бросает IOException. Что будет со строкой в базе при настройках по умолчанию?

  • Транзакция откатится: любое исключение, вышедшее из транзакционного метода, приводит к откату изменений
  • Транзакция не откатится: по умолчанию откат идёт только на RuntimeException и Error, для checked нужен rollbackFor
  • Транзакция не откатится, потому что save() фиксирует изменения в базе сразу в момент своего вызова
  • Поведение зависит от того, был ли до исключения вызван flush: без него изменения просто не дойдут до базы

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела