所以,我有一些實體和集合的JHipster
生成的應用程序,其中包括主要的實體我有研究,有許多藏品。JPA收集保存的ID,而不是其他領域
其中之一是StudySites,它是一個ManyToMany
這裏的主人是研究:
在研究的關係和setter:
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "study_sites_study",
joinColumns = @JoinColumn(name="studys_id", referencedColumnName="ID"),
inverseJoinColumns = @JoinColumn(name="study_sitess_id", referencedColumnName="ID"))
private Set<StudySites> studySites = new HashSet<>();
public void setStudySites(Set<StudySites> studySites) {
studySites.stream().forEach(ss-> {
Set<Study> setStudys=ss.getStudys();
setStudys.add(this);
ss.setStudys(setStudys);
});
this.studySites = studySites;
}
在StudySites的關係:
@ManyToMany(mappedBy = "studySites")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Study> studys = new HashSet<>();
關係和我們處理這一切的方式都可能相當複雜地解釋,並且會導致一個相當大的帖子,所以我會嘗試將其底線說出來, LL與Angular
並將其發送到後端,它解壓縮Studys並把所有集合在StudyDTO在DTO
的信息,所有這一切工作得很好,我在所有領域的所有數據的權利,直到我們調用保存方法從存儲庫中,除了這個特定實體的字段外,它保存了其他每個集合都很好。
如果我將StudySite添加到Study中,Hibernate
將爲其分配一個id,保存它並將關係保存到連接表中,因此當我再次加載Study時,它將顯示StudySite,但顯示空字段。
發生這種情況時,我插入一個新的,或者如果我嘗試更新現有
我也記錄了可變從休眠結合在這裏你可以欣賞所有的值要在爲空,但在保存時連接表已檢索到所分配的ID和study_id:
Hibernate: /* insert org.wwarn.nmfisurveyor.datamanagement.domain.StudySites */ insert into study_sites (country_id, dms_lat, dms_lon, google_lat, google_lon, province_name, site_name) values (?, ?, ?, ?, ?, ?, ?)
2017-02-14 17:12:50.972 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [null]
2017-02-14 17:12:50.972 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [VARCHAR] - [null]
2017-02-14 17:12:50.972 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [3] as [VARCHAR] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [4] as [DOUBLE] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [5] as [DOUBLE] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [6] as [VARCHAR] - [null]
2017-02-14 17:12:50.973 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [7] as [VARCHAR] - [null]
Hibernate: /* insert collection row org.wwarn.nmfisurveyor.datamanagement.domain.Study.studySites */ insert into study_sites_study (studys_id, study_sitess_id) values (?, ?)
2017-02-14 17:12:50.980 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [BIGINT] - [4089]
2017-02-14 17:12:50.980 TRACE 8859 --- [nio-8080-exec-9] o.h.type.descriptor.sql.BasicBinder : binding parameter [2] as [BIGINT] - [1629]
任何建議,歡迎
PS:在各類事情我已經做了跟蹤誤差,我完全抹掉實體和所有的參照它(李quibase,一切)並用不同的名稱重新創建,沒有任何改變。
試過,以防萬一早些時候,但保存爲在StudyDTO中設置它們時,您並未將研究添加到研究集合中。但是,所有其他ManyToMany集合都具有相同的setter。 – Steven