我正在使用Spring 3和Hibernate 4来构建我的项目。
我的问题是,例如,User对象有五个字段,id,name,password,school和address。我只授予用户更新/编辑学校和/或地址的权利。当用户首次通过GET访问编辑页面时,我想用该用户的现有信息填充该字段。
点击提交按钮后,我想通过休眠更改数据库中相应的更新字段。
Controller.java
@RequestMapping(value="/edit/{userId}", method="RequestMethod.GET")
public String toEdit(Model model,@PathVariable int userId){
User user = userService.get(userId);
model.addAttribute("command",user);
return "/edit";
}
@RequestMapping(value="/save", method="RequestMethod.POST")
public String toSave(Model model){
//how to implement this?
}
edit.jsp文件
<form:form action="/save" method="POST">
<form:input path="school"/>
<form:input path="address"/>
<input type="submit"/>
</form:form>
我的想法是,如果我可以将那些未更新的字段作为隐藏字段放在edit.jsp页面中,这样当User对象重新绑定时(提交表单时),我仍然可以捕获用户的id,name和密码信息。
我的方法的缺陷是显而易见的。首先,密码作为隐藏字段永远不是要走的路。其次,它在edit.jsp页面上添加了不必要的信息。
我的第二个想法是我只能将用户ID作为隐藏字段放在edit.jsp中,当提交表单时,我可以使用User user = userService.get(command.id)
来获取相应的用户对象并设置字段(例如学校或地址)通过类似user.setSchool(command.getSchool())
之类的新输入的那些。完成所有这些后,我可以更新用户对象。这种方法有点麻烦,因为如果我有很多字段要更新,那么会有很多代码。
有更好的方法吗? (我肯定必须有一个)我对Spring和Hibernate很新,所以如果我遗漏了一些非常明显的东西,请告诉我。
感谢。
答案 0 :(得分:1)
如果您使用"dynamic-update",则只会更新已修改的字段。
您可以使用@org.hibernate.annotations.Entity
标记您的实体以进行动态更新。
@Entity
@org.hibernate.annotations.Entity(
selectBeforeUpdate = true,
dynamicInsert = true, dynamicUpdate = true)
public class User { ... }