0
我有以下設置。JPA programmaticaly定義級聯選項
@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(休眠)將只能堅持什麼,用戶已經改變,所以我們很好在這一點上。但是如果最初序列化的CV不包含任何子屬性會發生什麼?如果是這樣的JPA查詢的只是結果:
em.em.createNamedQuery("Select cv from CV"); // no eager loading no nothing.
在這種情況下,CV(經驗,教育,認證)的所有兒童將不會被填充。在執行merge()操作時,所有的子關係都將被刪除。我可以在某些情況下級聯(當我具有修改對象的整個圖形),而不是在其他級聯級聯(當我剛剛有一個沒有孩子的新近反序列化CV簡單列表)時,可以級聯嗎?