Fab*_*bio 5 java hibernate jpa entitymanager
我正在使用spring MVC从客户端接收JSON并自动从中创建一个对象.问题是客户端不向服务器发送实体中的所有字段,但某些字段为空并覆盖调用userDao.persist(user)的现有值.例如,我有这个实体:
@Entity
public class User {
@Id @GeneratedValue
private int id;
private String username;
private String password;
private String email;
Run Code Online (Sandbox Code Playgroud)
但是用户从不向我发送密码,因此从JSON构建的对象的"密码"字段为空.我不希望密码字段被空值覆盖.有一种方法可以说"休眠",如果你发现一个空值忽略它并且不覆盖数据库中保存的值?".我无法相信这个看似简单的问题没有一个简单的解决方案.
我认为您的问题的根源是您从JSON解析中获取的对象从未在其中获得实际值.它是一个只有JSON中设置的值的bean.
您需要从数据库加载实体,然后将JSON中的非空字段设置到加载的实体上.这样,只会设置JSON中提供的字段.
在保存数据库版本之前,我建议使用某种类型的适配器来"合并"(不是JPA合并)数据库版本和JSON版本.
添加@NotNull约束和Bean Validation将确保在尝试保存时值不为null.不幸的是,它们无法帮助您将值保存到实体中.
Ram*_*hil -3
我在作为一个没有经验的学生时写下这个答案。今天我的答案与@James DW 的答案类似。另外,从术语 来看userDao,我认为它是某种 ORM/ODM。在这种情况下,绝对值得搜索“ORM/ODM 的优缺点”。
如果您的问题只是数据库,那么我建议您使用存储过程,它检查该值是否为空,然后不要更改现有值。这样您仍然可以发送空值,并且您的验证是在服务器端进行的,这更加稳健。
| 归档时间: |
|
| 查看次数: |
7375 次 |
| 最近记录: |