Назад к вопросам
Junior — Middle
66
Что произойдет с транзакциями в Spring, если внутри метода, не отмеченного как транзакционный, вызван метод, имеющий транзакционные настройки?
Ответ от нейросети
sobes.tech AI
Если метод, не помеченный как транзакционный, вызывает метод с аннотацией @Transactional, то по умолчанию транзакция будет создана и применена к вызываемому методу. Spring откроет новую транзакцию при входе в транзакционный метод и закроет её при выходе.
Однако важно помнить, что если вызов транзакционного метода происходит внутри того же класса через внутренний вызов (this.method()), то прокси Spring не сработает, и транзакция не будет применена.
Пример:
@Service
public class MyService {
public void nonTransactionalMethod() {
transactionalMethod(); // Внутренний вызов, @Transactional может не сработать
}
@Transactional
public void transactionalMethod() {
// Здесь должна быть транзакция
}
}
В таком случае транзакция не будет создана. Чтобы транзакция сработала, вызов должен идти извне через прокси Spring.