Я использую Spring DATA JPA для работы с моей базой данных (PostgreSQL).
Допустим, в моем коде есть следующий репозиторий.
public interface StoreRepository extends JpaRepository<Store, UUID> {
}
public interface AddressRepository extends JpaRepository<Address, UUID> {
}
И у меня есть следующий сервис для использования репозитория
@Autowired StoreRepository storeRepository;
@Autowired AddressRepository addressRepository;
public void doSomeProcessing(){
Optional<Store> oStore = storeRepository.findById(UUID id);
if oStore.isPresent(){
// Update something in Store,
// Create new Address in Address Repository
// do some work..
}
}
Вопрос 1. Допустим, что-то происходит в методе doSomeProcessing (), выполняет ли Spring DATA автоматический откат всех транзакций, которые произошли в методе doSomeProcessing ()? Например, если он создал новый адрес в репозитории адресов, он автоматически удаляет его, когда возникает какое-то исключение?
Вопрос 2. Мой провайдер базы данных рекомендует мне реализовать повторный лог c, если и когда возникнет конфликт транзакций бывает. (Postgres код ошибки 40001). Кто-нибудь знает, будет ли Spring DATA автоматически повторять попытку при возникновении такой ошибки? Если нет, как мне реализовать повторный вход в приведенный выше код?
Спасибо