Назад к вопросам
Junior — Middle
63
Если метод, помеченный аннотацией @Transactional, вызывает другой метод с той же аннотацией, каково будет число созданных транзакций?
Ответ от нейросети
sobes.tech AI
Если метод, помеченный аннотацией @Transactional, вызывает другой метод с той же аннотацией в рамках одного класса, то обычно создаётся только одна транзакция. Это связано с тем, что Spring использует прокси для управления транзакциями, и вызов метода внутри того же класса не проходит через прокси, поэтому новая транзакция не создаётся.
Таким образом, при внутреннем вызове транзакция будет общей для обоих методов, и не будет вложенных транзакций по умолчанию.
Пример:
@Service
public class MyService {
@Transactional
public void methodA() {
// транзакция начинается здесь
methodB(); // вызов внутри класса, новая транзакция не создаётся
}
@Transactional
public void methodB() {
// выполняется в той же транзакции, что и methodA
}
}
Если нужно, чтобы метод methodB выполнялся в отдельной транзакции, вызов должен происходить через прокси, например, через другой бин или с помощью ApplicationContext.