Sobes.tech
Junior — Middle
74

Какой эффект возникает при вызове метода, аннотированного @Transactional, внутри другого метода без этой аннотации?

Answer from AI

sobes.tech AI

Если метод, аннотированный @Transactional, вызывается внутри другого метода без этой аннотации в том же классе напрямую (без использования прокси), то транзакция, как правило, не будет создана.

Это связано с тем, что Spring использует прокси для управления транзакциями, и вызов метода внутри того же класса не проходит через прокси, а значит аннотация @Transactional не срабатывает.

В результате:

  • Транзакция не начнётся.
  • Все операции внутри метода выполнятся без транзакционного контекста.

Чтобы транзакция сработала, вызов должен происходить извне через прокси, либо нужно использовать другие механизмы, например, внедрение самого класса и вызов метода через него.