gpt4 book ai didi

java - CrudRepository : Save method deletes entry

转载 作者:行者123 更新时间:2023-11-30 05:46:55 24 4
gpt4 key购买 nike

调用 CrudRepository.save() 方法会删除条目,而不是更新现有条目。

Controller :

@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();
}

数据传输:

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,因为它是由 Controller 和服务接收的,并且更新后它仍然相同。无论如何,服务 update 方法似乎会保存和删除实体。因为我取回了从 save 方法返回的实体创建的 dto,并且我可以看到更改后的名称。但是,如果我刷新页面或查看users 表,该条目就会消失。

最佳答案

您总是创建一个新实体并将其保存(在 toEntity() 方法中,这实际上会覆盖以前的实体。

如果您想更新现有用户,则需要对其字段执行获取 + 更新,然后调用保存。

例如,这将更新现有用户的名称:

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

您也不应该手动设置实体的 ID。杠杆@Id和@GenerateValue。

关于java - CrudRepository : Save method deletes entry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54668342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com