调用CrudRepository.save()
方法时,会删除现有条目而不是更新现有条目。
控制器:
@RequestMapping(value = "{id}", method = PATCH)
public User update(@PathVariable Long id, @RequestBody UpdateUser existingUser) {
return userService.update(existingUser);
}
Service:
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();
}
}
我确保在控制器和服务接收到DTO后,将ID设置为相同的值,并在更新后仍然保持不变。无论如何,服务的“update”方法似乎保存并删除实体。因为我会收到从“save”方法返回的实体创建的DTO,我可以看到更改后的名称。但是,如果刷新页面或查看“users”表,该条目将被删除。"最初的回答"。