Sobes.tech
Junior — Middle
93

Kas nutiks su transakcijomis Spring, jei metodo viduje, kuris nėra pažymėtas kaip transakcinis, iškviečiamas transakcinius nustatymus turintis metodas?

Atsakymas iš AI

sobes.tech AI

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

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

Пример:

@Service
public class MyService {

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

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

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