为什么spring Boot 更新方法创建新记录

42fyovps  于 2023-05-17  发布在  Spring
关注(0)|答案(2)|浏览(129)

我在Sping Boot 中创建了更新方法。它创建新记录而不是更新记录。
已尝试代码:
控制器:

@PutMapping("update/{id}")
public Users updateUser(@PathVariable Integer id, @RequestBody Users user) {
    user.setFname(user.getFname());
    user.setLname(user.getLname());
    user.setAddress(user.getAddress());
    user.setTelno(user.getTelno());
    return serveiceClass.updateUserbyId(id, user);
}

售后服务:

public Users updateUserbyId(Integer id, Users users) {
    return repositoryInterface.save(users);
}

我该如何解决这个问题?

nhaq1z21

nhaq1z211#

您没有检查用户是否存在,而是通过调用save方法创建新记录。save方法总是插入新行,如果给定对象中的id在DB中不存在,在您的情况下,user具有id 0,我猜,这就是为什么它插入新记录。您需要从给定的ID中获取User并更新DB中的现有记录。
在服务类中再创建一个方法

public Users getUserById(Integer id) {
             return repositoryInterface.findById(id).orElse(null);
        }

然后...

@PutMapping("update/{id}")
       public Users updateUser(@PathVariable Integer id, @RequestBody Users user) {
           Users userExisting =  serveiceClass.getUserById(id);
           if(userExisting  == null){
              throw Exception("User Not Found");
            }
          userExisting.setFname(user.getFname());
          userExisting.setLname(user.getLname());
          userExisting.setAddress(user.getAddress());
          userExisting.setTelno(user.getTelno());
          return serveiceClass.updateUserbyId(userExisting);
       }
mm9b1k5b

mm9b1k5b2#

我的一个初级正面临着这个问题,当检查时,我发现他也在更新用户的主键/ID。这可能不是可接受的解决方案,但是请检查你的id(你不能在更新用户的同时更新你的id/主键)

相关问题