【发布时间】:2015-10-24 10:31:22
【问题描述】:
-
我的模型是这样的:
@Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @Column(name="email") private String email; @Column(name = "weblink") private String webLink; //getter & setter } -
我们通过 http 请求收集表单或移动数据,springmvc 会将这些数据提供给 Model 类用户。
例如,我有一个这样的请求:
http://localhost:8080/update?id=1919&email=xx@google.com -
在控制器中,请求的 url 及其参数将自动转换为
User对象。@RequestMapping(method = RequestMethod.GET, value = "/update0") public User update(@ModelAttribute("User") User user){ System.out.println(user.getId()); System.out.println(user.getEmail()); System.out.println(user.getWebLink()); return userRepository.save(test); } -
如果我在mysql中有一条id为1919的记录,并且列(id、email、weblik)都有值。
如你所见,通过 web 或 mobile 传递的用户对象有两个属性
http://localhost:8080/update?id=1919&email=xx@google.comid 和 email 有值,而 weblink 没有。
所以,如果我执行
save方法,列email会更新为xx@google.com,weblik字段也会更新为NULL,但是我不想更新这个字段,我只是想要更新电子邮件字段。 -
我有两种方法可以解决这个问题,但都不是优雅的。
5.1 先加载用户对象并更新
User userExist = userRepository.findOne(user.getId()); userExist.setEmail(user.getEmail()); //or using //BeanUtil.copyProprty(formDto,modle) userRepository.save();5.2 使用
@DynamicUpdate,但它不起作用。有没有其他方法可以更新用户模型并且不做一些额外的工作。
提前致谢。
【问题讨论】:
标签: spring spring-mvc spring-boot spring-data spring-data-jpa