Встречается на собеседованиях • сегодня

Что произойдет если из нетранзакционного метода вызвать транзакционный

Вызов транзакционного метода из нетранзакционного не создаст новой транзакции, если используется стандартный механизм Spring AOP (проксирование). Транзакционные аннотации (@Transactional) работают только при вызове через Spring-прокси, а не при внутренних вызовах внутри класса.

Пример:

java
@Service
public class UserService {
    
    public void nonTransactionalMethod() {
        transactionalMethod(); // Транзакция НЕ будет создана!
    }

    @Transactional
    public void transactionalMethod() {
        // Логика с БД
    }
}

Решение:

  1. Вынести транзакционный метод в отдельный сервис
  2. Использовать самовызов через AopContext.currentProxy()
  3. Использовать програмное управление транзакциями через TransactionTemplate
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы