Sobes.tech
Назад к вопросам
Senior
3

Метод один @Transactional вызывает метод два @Transactional(REQUIRES_NEW) в одном классе. Сколько транзакций создастся?

Компании, где спрашивали
EXPERA

Ответ от нейросети

sobes.tech AI

Если метод один помечен аннотацией @Transactional с типом по умолчанию (обычно REQUIRED), а внутри него вызывается метод два с @Transactional(REQUIRES_NEW), то будет создано две транзакции:

  1. Первая транзакция — для метода один.
  2. Вторая транзакция — для метода два, которая будет независимой и начнётся в момент вызова метода два, при этом первая транзакция будет приостановлена.

Однако, если оба метода находятся в одном классе и вызов метода два происходит напрямую (без использования прокси Spring), то аннотация @Transactional(REQUIRES_NEW) не сработает, и транзакция не будет пересоздана. В этом случае будет использоваться одна транзакция.

Для корректной работы REQUIRES_NEW вызов должен идти через Spring proxy, например, через вызов из другого бина или через self-injection.