Json JAX-RS+;JPA,如何仅更新/合并实体的子集';s场?
假设我有以下实体:Json JAX-RS+;JPA,如何仅更新/合并实体的子集';s场?,json,jpa,jax-rs,Json,Jpa,Jax Rs,假设我有以下实体: @Entity @XmlRootElement @XmlAccessorType( XmlAccessType.FIELD) public class MyEntity { @Id @GeneratedValue private long id; private boolean field1; private boolean field2; private boolean field3; } 假设我有一个RESTWeb
@Entity
@XmlRootElement
@XmlAccessorType( XmlAccessType.FIELD)
public class MyEntity {
@Id
@GeneratedValue
private long id;
private boolean field1;
private boolean field2;
private boolean field3;
}
假设我有一个RESTWeb服务,它允许客户端向MyEntity资源发布部分或完整更新。方法签名可能如下所示:
@POST
@Path("{id}")
public Response postMyEntity(@PathParam("id") long id, MyEntity myEntity)
下面是一个JSON,客户端可以使用它只更新id为101的MyEntity的“field2”:
{
"id": 101
"field2": true
}
如果JPA知道在反序列化过程中只设置了field2,那么我希望使用如下简单的代码来保持此更改:
entityManager.merge(myEntity);
但是,此操作会更新字段1、字段2和字段3
人们通常如何确保数据库中只更新REST请求中JSON/XML中显式指定的字段?我读过一些关于人们在web服务中使用DTO(而不是实体本身)并手动确定需要在相应实体上设置哪些字段的文章……但是,这个用例看起来如此普遍,以至于我很惊讶它需要DIY方法。也许有更好的解决方案,但我决定强制我的REST服务生成和使用DTO,而不是实体。我的DTO类从不使用原语(Integer而不是int),这确保了如果客户机省略了JSON/XML属性,那么相应的DTO字段将为null 当我收到更新资源的帖子时,我: