Sobes.tech
Back to questions
Junior — Middle
49

Как ведет себя транзакционный контекст, когда внутри метода, отмеченного @Transactional, вызывается другой метод с такой же аннотацией?

Answer from AI

sobes.tech AI

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

По умолчанию используется Propagation.REQUIRED, что означает:

  • Если внешняя транзакция уже существует, внутренний метод будет выполняться в рамках той же транзакции.
  • Внутренний метод не создаёт новую транзакцию, а присоединяется к существующей.

Таким образом, оба метода работают в одной транзакции, и если в любом из них произойдет ошибка, вся транзакция будет откатана.

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