CrudRepository: метод Save удаляет запись - PullRequest
0 голосов
/ 13 февраля 2019

Вызов метода CrudRepository.save() удаляет запись вместо обновления существующей записи.

Контроллер:

@RequestMapping(value = "{id}", method = PATCH)   
public User update(@PathVariable Long id, @RequestBody UpdateUser existingUser) {
  return userService.update(existingUser);
}

Сервис:

public User update(UpdateUser existingUser) {
  if (!userRepository.exists(existingUser.getId()) {
    throw new UserNotFoundException();
  }

  UserEntity userEntity = existingUser.toEntity();
  return userRepository.save(userEntity).toDto();
}

Dtos:

public User {
  private Long id;
  private String name;
  // ..

  public UserEntity toEntity() {
    UserEntity entity = new UserEntity();
    entity.setId(id);
    entity.setName(name);
    return entity;
  }
}

public UpdateUser extends User {
  @NotNull
  @Override
  public Long getId() {
    super.getId();
  }
}

Я убедился, что ID установлен на Dto какон получен контроллером и службой и после обновления остается неизменным.В любом случае происходит то, что сервисный метод update появляется для сохранения и удаления объекта.Потому что я возвращаю dto, который был бы создан из сущности, возвращенной методом save, и я вижу измененное имя.Однако, если я обновлю страницу или загляну в таблицу users, запись исчезнет.

1 Ответ

0 голосов
/ 13 февраля 2019

Вы всегда создаете новую сущность и сохраняете ее (в своем методе toEntity (), который по существу перезаписывает предыдущую сущность.

Если вы хотите обновить существующего пользователя, вам нужно выполнить fetch + update в его полях, а затем вызовите save.

например, это обновит имя существующего пользователя:

UserEntity userEntity = userRepository.findOneById(existingUser.getId())
userEntity.setName(newName);
userRepository.save(userEntity);

Вы также не должны устанавливать идентификаторобъектов вручную. Используйте @Id и @ GeneratedValue.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...