开发中碰到的一个问题,此处体现了对于Hibernate对象update操作的理解。
对于一个object的更新,代码如下:
@RequestMapping(value="/{userid}/edit", method=RequestMethod.GET)
//@RequiresPermissions("user:edit")
public String editUser(@PathVariable("userid") Long userid, Model model){
User user=this.userService.getUser(userid);
model.addAttribute("user", user);
return "/user/editUser";
}
@RequestMapping(value="/{userid}/edit", method=RequestMethod.POST)
//@RequiresPermissions("user:edit")
public String editUser(@PathVariable("userid") Long userid, @ModelAttribute("user") User user){
this.userService.updateUser(user);
return "redirect:/user/manageUsers.w";
}
但是运行过程中,数据并没有被更新,并出现错误:there is no ID for this object.
原因如下:
Hibernate对于游离状态的object,只有在DB中有对应的ID时才能成为游离状态。 所以当对其进行更新时,Hibernate会主动根据此游离对象的ID去DB中查询对应的数据。如果游离对象没有ID,则不能根据此ID去数据库中查询,进而不可能对其进行更新。
=========
解决如下:
@RequestMapping(value="/{userid}/edit", method=RequestMethod.POST)
//@RequiresPermissions("user:edit")
public String editUser(@PathVariable("userid") Long userid, @ModelAttribute("user") User user){
user.setId(userid); //增加此语句,设定游离对象的ID。
this.userService.updateUser(user);
return "redirect:/user/manageUsers.w";
}
对于一个object的更新,代码如下:
但是运行过程中,数据并没有被更新,并出现错误:there is no ID for this object.
原因如下:
Hibernate对于游离状态的object,只有在DB中有对应的ID时才能成为游离状态。 所以当对其进行更新时,Hibernate会主动根据此游离对象的ID去DB中查询对应的数据。如果游离对象没有ID,则不能根据此ID去数据库中查询,进而不可能对其进行更新。
=========
解决如下: