【发布时间】:2017-06-12 17:08:07
【问题描述】:
让我们假设一个 RESTful 服务收到一个PATCH 请求来更新一个可能有数十个字段的实体的一个或多个字段。
@Entity
public class SomeEntity {
@Id
@GeneratedValue
private Long id;
// many other fields
}
patch对应实体的一种肮脏方式是这样写:
SomeEntity patch = deserialize(json);
SomeEntity existing = findById(patch.getId());
if (existing != null)
{
if (patch.getField1() != null)
{
existing.setField1(patch.getField1());
}
if (patch.getField2() != null)
{
existing.setField2(patch.getField2());
}
if (patch.getField3() != null)
{
existing.setField3(patch.getField3());
}
}
但这太疯狂了!而且,如果我想将 1 修补到该实体的许多和其他关联上,那么精神错乱甚至会变得危险!
是否有一种理智而优雅的方式来完成这项任务?
【问题讨论】:
-
如果要将
null设置为字段怎么办? -
“JPA”与此有什么关系?这同样适用于任何带有字段的 Java 对象!