【发布时间】:2015-02-19 02:50:22
【问题描述】:
我有一个非常简单的 mysql 记录,如下所示:
+------+-------+-----------+
| id | name | password |
+------+-------+-----------+
| 1 | John | d0c91f13f |
+------+-------+-----------+
... ... ...
这是它的休眠实体;没什么花哨的
@Entity
@Table(name = "user", schema = "", catalog = "trade")
public class UserEntity{
private long id;
private String name;
private String password;
@Id
@Column(name = "id")
public long getId(){
return id;
}
public void setId(long id){
this.id = id;
}
@Column(name = "name")
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
@Column(name = "password")
public String getPasswrod(){
return password;
}
public void setPassword(String password){
this.password = password;
}
}
为了方便,我使用Gson从前端传入的json字符串中解析实体。
记录的json字符串是这样的:
{"id":1, "name":"John", "password":"d0c91f13f"}
然后会从json字符串中解析userEntity:
UserEntity userEntity = gson.fromJson(userJson, UserEntity.class);
我可以使用Session.save(userEntity) 和Session.update(userEntity) 插入或更新用户。
如果每个字段都包含在 json 字符串中,那么事情似乎按预期进行。
但是当某些字段被省略时,例如password:
{"id":1, "name":"John Smith"}
这表明我应该进行部分更新并且不修改省略的字段,但出现了问题。因为
解析过程会将password 设置为Null。并将其更新到数据库中。
那么,在这种情况下,有没有办法部分更新记录?
遍历每个字段并逐个设置字段将是最后一个选项;除此之外还有什么?
提前致谢。
【问题讨论】:
标签: java mysql json hibernate sql-update