Spring middle
Два @Transactional метода в одном классе: A() вызывает B(). Сколько транзакций?
Ответ
Одна. Вызов this.B() минует прокси → @Transactional на B() не работает. B() выполняется в транзакции A() (Propagation.REQUIRED по умолчанию), которая открывается при внешнем вызове A() через прокси.
Разбор: Транзакция одна, потому что внутренний вызов this.B() идёт напрямую, минуя прокси Spring, и аннотация на B() не срабатывает; B() просто выполняется в транзакции, открытой при входе в A() через прокси. Ошибки дистракторов: REQUIRED не создаёт вложенную транзакцию (это NESTED), внутренний вызов как раз НЕ проходит через прокси, а транзакция A() при внешнем вызове работает нормально.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.