Sobes.tech
Junior — Middle

¿Qué efecto se produce al llamar a un método anotado con @Transactional desde otro método que no tiene esta anotación?

sobes.tech AI

Respuesta de la IA

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

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

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

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

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