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

Как работает транзакция в Spring Data JPA

Транзакция в Spring Data JPA обеспечивает атомарность операций с БД. Работает через аннотацию @Transactional, которая управляет открытием/закрытием транзакции автоматически.

Основные моменты:

  1. По умолчанию транзакция создается при вызове метода и завершается при его успешном выполнении (commit), либо откатывается при исключении (rollback).
  2. Распространяется на все вызовы методов репозитория внутри аннотированного метода.

Пример:

java
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public void transferMoney(Long fromId, Long toId, BigDecimal amount) {
        User from = userRepository.findById(fromId).orElseThrow();
        User to = userRepository.findById(toId).orElseThrow();
        
        from.setBalance(from.getBalance().subtract(amount));
        to.setBalance(to.getBalance().add(amount));
        
        userRepository.save(from);
        userRepository.save(to);
    }
}

Нюансы:

  • Можно настраивать propagation (REQUIRED, REQUIRES_NEW и др.)
  • По умолчанию rollback только для RuntimeException
  • Для проверяемых исключений нужно указывать @Transactional(rollbackFor = Exception.class)
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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