Я использую расширение данных JPA CrudRepository для сохранения и получения данных. Я должен удалить и сохранить запись одновременно в транзакции.
Мой слой репозитория
@Repository
public interface DataRepository extends CrudRepository<TableEntity, TableEntityPK> {
@Query("SELECT u FROM TableEntity u where u.TableEntityPK.clientID=:clientID")
List<TableEntity> findAllByClient(@Param("clientID") String clientID);
@Transactional
@Modifying
@Query("DELETE FROM TableEntity u where u.TableEntityPK.clientID=:clientID and u.TableEntityPK.eventId in :eventIds")
void deleteAllEventByClientID(@Param("clientID") String clientID,@Param("eventIds") Set<Integer> eventIds);
}
Сначала я вызываю удаление, а затем сохранение, сохраняя метод транзакционным. Но исключение, выданное после deleteAllEventByClientID перед сохранением, удаляет данные из таблицы и пропускает сохранение. Как сделать удаление и сохранение в разрезе
@Service
public class DataServiceImpl {
@Transactional
public List<TableEntity> createEvent() {
dataRepository.deleteAllEventByClientID(subAccount.get("clientId"),eventIds);
dataRepository.saveAll(data);
}
}
Это будет откат в случае
dataRepository.deleteAllEventByClientID(subAccount.get("clientId"),eventIds);
throws new Exception("forced exception");
dataRepository.saveAll(data);