Sobes.tech
Junior — Middle
91

Comment le contexte transactionnel se comporte-t-il lorsqu'une méthode annotée @Transactional appelle une autre méthode avec la même annotation ?

Réponse de l'IA

sobes.tech IA

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

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

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

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

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