Встречается на собеседованиях • сегодня
Что будет, если вызвать Transactional метод из метода без Transactional в Spring
Если @Transactional метод вызывается из другого метода без аннотации в том же классе, транзакция не начнется. Это происходит из-за работы Spring AOP: проксирование работает только при вызове через прокси-объект, а внутренние вызовы внутри класса обходят его.
Пример:
java
@Service
public class UserService {
public void nonTransactionalMethod() {
transactionalMethod(); // Транзакция НЕ создастся!
}
@Transactional
public void transactionalMethod() {
// Логика с БД
}
}Решение:
- Вынести
@Transactionalметод в отдельный сервис. - Использовать
self-injection(не рекомендуется):
java
@Autowired
private UserService self; // Инжектим себя
public void nonTransactionalMethod() {
self.transactionalMethod(); // Теперь транзакция работает
}- Использовать
TransactionTemplateпрограммно.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы