用hibernate持久保存部分更新对象的方法

时间:2012-04-21 05:13:01

标签: hibernate

我正在使用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很新,所以如果我遗漏了一些非常明显的东西,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:1)

如果您使用"dynamic-update",则只会更新已修改的字段。 您可以使用@org.hibernate.annotations.Entity标记您的实体以进行动态更新。

@Entity
@org.hibernate.annotations.Entity(
        selectBeforeUpdate = true,
        dynamicInsert = true, dynamicUpdate = true)
public class User { ... }