Sobes.tech
Back to questions
Junior — Middle
65

Что произойдет с транзакциями в Spring, если внутри метода, не отмеченного как транзакционный, вызван метод, имеющий транзакционные настройки?

Answer from AI

sobes.tech AI

Если метод, не помеченный как транзакционный, вызывает метод с аннотацией @Transactional, то по умолчанию транзакция будет создана и применена к вызываемому методу. Spring откроет новую транзакцию при входе в транзакционный метод и закроет её при выходе.

Однако важно помнить, что если вызов транзакционного метода происходит внутри того же класса через внутренний вызов (this.method()), то прокси Spring не сработает, и транзакция не будет применена.

Пример:

@Service
public class MyService {

    public void nonTransactionalMethod() {
        transactionalMethod(); // Внутренний вызов, @Transactional может не сработать
    }

    @Transactional
    public void transactionalMethod() {
        // Здесь должна быть транзакция
    }
}

В таком случае транзакция не будет создана. Чтобы транзакция сработала, вызов должен идти извне через прокси Spring.