Sobes.tech
Back to questions
Junior — Middle
103

Какие отличия существуют между сервисами, помеченными аннотацией @Transactional, и обычными сервисами в контексте управления транзакциями?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Аннотация @Transactional в Java (обычно в Spring) указывает, что методы класса или отдельные методы должны выполняться в рамках транзакции. Основные отличия сервисов с @Transactional и обычных сервисов:

  • Управление транзакциями: В сервисах с @Transactional Spring автоматически открывает, коммитит или откатывает транзакцию в зависимости от успешности выполнения метода. В обычных сервисах транзакции нужно управлять вручную.

  • Атомарность операций: Методы с @Transactional гарантируют, что все операции внутри метода либо успешно завершатся, либо будут отменены при ошибке.

  • Конфигурация и проксирование: Spring создает прокси для сервисов с @Transactional, чтобы внедрить логику управления транзакциями.

  • Поведение при исключениях: По умолчанию транзакция откатывается при непроверяемых исключениях (RuntimeException), что реализуется автоматически.

Пример:

@Service
@Transactional
public class UserService {
    public void createUser(User user) {
        userRepository.save(user); // операция в транзакции
        // если здесь выбросится исключение, изменения откатятся
    }
}

В обычном сервисе без @Transactional нужно вручную управлять транзакциями через EntityManager или DataSource.