Middle
73
questionbank

Что произойдет, если в методе вызвать метод, помеченный аннотацией @Transactional?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Если из метода внутри того же объекта (Self-Invocation) вызвать метод, помеченный @Transactional, транзакция не будет создана или присоединена к существующей. Это происходит потому, что Spring AOP по умолчанию использует прокси-объекты для применения аспектов, включая транзакции. При вызове метода внутри того же объекта, вызов идет непосредственно к реальному объекту (this), минуя прокси.

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

  • Инжекция self-bean:
    java
  • AopContext.currentProxy():
    java

Если метод с @Transactional вызывается из другого Spring-бина, транзакция будет создана или присоеднинена к существующей, поскольку вызов пройдет через прокси-объект.