Обновление данных Spring создает новую запись в случае неверного первичного ключа - PullRequest
0 голосов
/ 14 мая 2019

Я использую Spring Data в своем приложении и вызываю "save" Метод репозитория для вставки новой записи или обновления существующей сущности, если я передаю ID (первичный ключ) .

Но я замечаю, что когда я передал ID , которого нет в моей базе данных, вставлена ​​новая запись, как я могу предотвратить это поведение?

Мне нужно сгенерировать исключение в этом случае.

Спасибо

1 Ответ

2 голосов
/ 14 мая 2019

Реализация метода save выглядит следующим образом:

@Transactional
    public <S extends T> S save(S entity) {

        if (entityInformation.isNew(entity)) {
            em.persist(entity);
            return entity;
        } else {
            return em.merge(entity);
        }
    }

Таким образом, он проверяет, является ли он новым или нет.Если оно новое, оно сохраняется, иначе оно сливается.В этом случае вы можете использовать метод CrudRepository.existsById(Integer id), чтобы проверить, существует он или нет, и, соответственно, вы можете выдать исключение следующим образом:

Пример:

   public void updatePost(Post post) {
        if(!repo.existsById(post.getPostId())){
            throw new ResourceNotFoundException("Resource with given id"+post.getPostId()+" not exists");
        }
        repo.save(post);
    }
...