【发布时间】:2013-05-11 17:30:27
【问题描述】:
我有以下设置。
@Table(name = "CV", schema = "recruiter")
public class CV extends AuditedEntity {
....
@OneToMany(cascade = { CascadeType.ALL})
private Set<Experience> experiences;
@OneToMany(cascade = { CascadeType.ALL})
private Set<Education> educations;
@OneToMany(cascade = { CascadeType.ALL})
private Set<Certification> certifications;
....
}
如您所见,我只想级联所有操作。选择表中的所有 CV 后,我将集合传递给将实体序列化为 JSON 的上层。用户将根据自己的需要修改实体值和子值。
当实体返回时,它将从 JSON 反序列化并合并回会话中:
// cv is the deserialization of [{"id":1,"creationDate":1368230400000,"creationUser" ... along with all child entities ( educations, experiences and certifications )
em.merge(cv);
现在,通常 JPA(Hibernate) 只会保留用户更改的内容,所以我们在这一点上没问题。但是如果最初序列化的 CV 不包含任何子属性会发生什么?如果它只是这个 JPA 查询的结果怎么办:
em.em.createNamedQuery("Select cv from CV"); // no eager loading no nothing.
在这种情况下,不会填充 CV 的所有子项(经验、教育、证书)。在进行merge()操作时,所有的子关系都会被删除。
长话短说,我可以在某些情况下级联(当我拥有修改对象的整个图表时)而不在其他情况下级联(当我只有一个没有子级的新反序列化 CV 的简单列表时)?
【问题讨论】: