Junior — Middle
O que acontece com as transações no Spring se dentro de um método, não marcado como transacional, for chamado um método com configurações transacionais?
sobes.tech IA
Resposta da IA
Если метод, не помеченный как транзакционный, вызывает метод с аннотацией @Transactional, то по умолчанию транзакция будет создана и применена к вызываемому методу. Spring откроет новую транзакцию при входе в транзакционный метод и закроет её при выходе.
Однако важно помнить, что если вызов транзакционного метода происходит внутри того же класса через внутренний вызов (this.method()), то прокси Spring не сработает, и транзакция не будет применена.
Пример:
@Service
public class MyService {
public void nonTransactionalMethod() {
transactionalMethod(); // Внутренний вызов, @Transactional может не сработать
}
@Transactional
public void transactionalMethod() {
// Здесь должна быть транзакция
}
}
В таком случае транзакция не будет создана. Чтобы транзакция сработала, вызов должен идти извне через прокси Spring.