Sobes.tech
Junior — Middle

Wat gebeurt er met transacties in Spring als binnen een niet-transactie gemarkeerde methode een methode met transactionele instellingen wordt aangeroepen?

sobes.tech AI

Antwoord van AI

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

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

Пример:

@Service
public class MyService {

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

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

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