Вызов метода 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
, запись исчезнет.