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

Почему не будет транзакции если в @Service второй метод вызывает первый метод и первый метод - @Transactional

Это связано с тем, как Spring обрабатывает транзакции через AOP-прокси. При вызове метода внутри того же класса, прокси не перехватывает вызов, и аннотация @Transactional игнорируется. Spring создает прокси только для вызовов извне класса.

java
@Service
public class MyService {
    
    @Transactional
    public void methodA() {
        // транзакция не будет работать
        methodB();
    }

    @Transactional
    public void methodB() {
        // выполнится без транзакции
    }
}

Решение:

  1. Вызывать метод через self-injection (@Autowired private MyService self;)
  2. Использовать TransactionTemplate
  3. Выносить транзакционные методы в отдельный сервис
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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