正如To initialize or not initialize JPA relationship mappings?所说,初始化JPA映射关系是一种很好的做法。
但是在Web架构(Spring MVC)中,实体将作为JSON发送,通常使用RESTfull API,序列化中将省略关系,并将使用其路径将其提取到服务器(即employees / [ID] /项目)。
如果我们有:
class Employee {
@ManyToMany //Employee owner of relation
protected List<Project> projects=new ArrayList<Project>(0);
}
如果从客户端我们只想更新 Employee 名称,客户端将JSON发送到服务器(HTTP PUT),它将被反序列化并且 employee.projects 将被初始化为空集合。当EntityManager保存时,它将更新属性(右)和项目(员工是业主方)删除现有项目。
另一种方法是使用DIY merge pattern。 &#34;我们不是调用EntityManager.merge而是调用EntityManager.find来查找现有实体并自己复制状态&#34; 。此解决方法需要更新时的特定实体代码。
解决问题的最佳方法是什么?