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