2

我正在使用 Spring 3 和 Hibernate 4 来构建我的项目。

我的问题是,例如,一个 User 对象有五个字段,id、name、password、school 和 address。我只授予用户更新/编辑他的学校和/或地址的权利。当用户第一次通过 GET 访问编辑页面时,我想用用户的现有信息填充该字段。

单击提交按钮后,我想通过休眠更改数据库中相应的更新字段。

控制器.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?
}

编辑.jsp

<form:form action="/save" method="POST">
    <form:input path="school"/>
    <form:input path="address"/>
    <input type="submit"/>
</form:form>

我的想法是,如果我可以将那些未更新的字段作为隐藏字段放在edit.jsp页面中,以便在用户对象重新绑定时(提交表单时),我仍然可以捕获用户的ID,名称和密码信息.

我的方法的缺陷是显而易见的。首先,密码作为隐藏字段永远不是要走的路。其次,它在edit.jsp 页面上添加了不必要的信息。

我的第二个想法是我只能将用户ID作为隐藏字段放在edit.jsp中,提交表单时,我可以使用User user = userService.get(command.id) 获取相应的用户对象并将字段(例如学校或地址)设置为新输入的字段类似的东西user.setSchool(command.getSchool())。在所有这些之后,我可以更新用户对象。这种方法有点麻烦,因为如果我有很多字段要更新,就会有很多代码。

有一个更好的方法吗?(我相信一定有一个)我对 Spring 和 Hibernate 很陌生,所以如果我遗漏了一些非常明显的东西,请告诉我。

谢谢。

4

1 回答 1

1

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

@Entity
@org.hibernate.annotations.Entity(
        selectBeforeUpdate = true,
        dynamicInsert = true, dynamicUpdate = true)
public class User { ... }
于 2012-04-21T05:30:04.173 回答