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

Как лучше использовать аннотацию Transactional в Spring

Аннотация @Transactional в Spring управляет транзакциями на уровне метода или класса. Основные рекомендации:

  1. Размещение: Лучше ставить на сервисный слой, а не на DAO/репозитории, чтобы охватить бизнес-логику целиком.
  2. Распространение (propagation):
    • REQUIRED (по умолчанию) – использует текущую транзакцию или создает новую.
    • REQUIRES_NEW – всегда создает новую транзакцию.
  3. Изоляция (isolation): Например, READ_COMMITTED для предотвращения "грязного" чтения.
  4. Только для чтения: readOnly=true оптимизирует запросы, если изменений данных нет.

Пример:

java
@Service
public class UserService {
    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
    public void updateUser(User user) {
        // бизнес-логика
    }
}

Важно: Избегайте вызовов @Transactional-методов внутри одного класса – это обходит AOP-прокси. Используйте self-инъекцию или выносите в отдельный компонент.

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

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

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

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