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

Что произойдет при вызове одного метода c @Transactional другим c @Transactional

Если метод с @Transactional вызывает другой метод с @Transactional, поведение зависит от параметра propagation:

  1. По умолчанию (REQUIRED) – второй метод будет выполняться в той же транзакции, что и первый. Если произойдет исключение – откат затронет оба метода.
  1. REQUIRES_NEW – создается новая транзакция, независимая от первой. Если вторая транзакция завершится неудачно, первая может продолжиться (если нет исключения).

Пример:

java
@Transactional
public void methodA() {
    // Работа в транзакции 1
    methodB(); // Зависит от propagation
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
    // Работает в новой транзакции 2
}

Важно: если methodB вызывается из того же класса, что и methodA, аннотация @Transactional может игнорироваться из-за особенностей Spring AOP (проксирование). Для обхода можно использовать self-injection или вынести methodB в отдельный сервис.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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