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

Что возникает, если в сервисе есть два метода, каждый из которых помечен @Transactional, и один метод вызывается внутри другого

При вызове одного @Transactional-метода внутри другого поведение зависит от propagation (распространения транзакции). По умолчанию (REQUIRED), если транзакция уже существует, внутренний метод использует её, а не создаёт новую. Это может привести к неожиданным последствиям, например, если внутренний метод выбрасывает исключение, откатывается вся транзакция.

Пример:

java
@Service
public class UserService {
    @Transactional
    public void outerMethod() {
        innerMethod(); // Вызов внутри транзакции
    }

    @Transactional
    public void innerMethod() {
        // Работает в той же транзакции, что и outerMethod
    }
}

Если нужно независимое поведение, используйте REQUIRES_NEW:

java
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void innerMethod() { ... }

Важно учитывать изоляцию и deadlock-риски при вложенных транзакциях.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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