所以,我有一些实体和集合的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