【发布时间】:2016-05-23 06:54:30
【问题描述】:
我的控制器
@RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
public String updateUserById(@PathVariable("id") Long id, Model model) {
User user = userRepository.findOne(id);
model.addAttribute(user);
return "admin/editUser";
}
@RequestMapping(value = "/user/{id}", method = RequestMethod.POST)
@ResponseBody
public String updateUserById(@PathVariable("id") Long id, @ModelAttribute User user) {
userRepository.updateUser(id, user); // with a try catch
}
道
@Override
public void updateUser(Long id, User user) {
User userDB = userRepository.findOne(id);
userDB.setFirstName(user.getFirstName());
userDB.setLastName(user.getLastName());
userDB.setEmail(user.getEmail());
userDB.setUsername(user.getUsername());
userRepository.save(userDB);
}
这种方法有效,但对我来说很难看。假设用户刚刚更改了视图中的名字字段,我该如何调整我的代码只调用函数来设置名字?
类似于观察者模式来通知有变化的字段?
【问题讨论】:
-
你使用休眠?
-
是的,我使用的是休眠,更准确地说是 spring-boot-starter-data-jpa
-
查看我下面的答案,使用 dynamicUpdate=true。它只会更新更改的值。
-
使用 spring-data-jpa,并拥有一个扩展 CrudRepository 的存储库,您应该能够使用已设置的 ID 保存您的实体,并且 spring-data 将覆盖具有相同 ID 的实体。无需单独设置实体的属性。请参阅下面帕特里克的回答。
标签: java spring model-view-controller