Junior — Middle
Dacă o metodă marcată cu @Transactional apelează o altă metodă cu aceeași adnotare, câte tranzacții vor fi create?
sobes.tech AI
Răspuns de la AI
Если метод, помеченный аннотацией @Transactional, вызывает другой метод с той же аннотацией в рамках одного класса, то обычно создаётся только одна транзакция. Это связано с тем, что Spring использует прокси для управления транзакциями, и вызов метода внутри того же класса не проходит через прокси, поэтому новая транзакция не создаётся.
Таким образом, при внутреннем вызове транзакция будет общей для обоих методов, и не будет вложенных транзакций по умолчанию.
Пример:
@Service
public class MyService {
@Transactional
public void methodA() {
// транзакция начинается здесь
methodB(); // вызов внутри класса, новая транзакция не создаётся
}
@Transactional
public void methodB() {
// выполняется в той же транзакции, что и methodA
}
}
Если нужно, чтобы метод methodB выполнялся в отдельной транзакции, вызов должен происходить через прокси, например, через другой бин или с помощью ApplicationContext.