したがって、多くのコレクションを持つ主体の中に、多くのエンティティとコレクションを持つJHipster
生成アプリケーションがあります。JPAコレクションの保存IDですが、その他のフィールドはありません
そのうちの一つは、それは所有者が研究でManyToMany
で、StudySitesです:研究における
関係とセッター:
@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<>();
私たちの関係とそれを扱う方法は、説明するのがかなり複雑になる可能性があり、大きな投稿になることもありますので、私はDTO
の情報をAngular
とし、それをバックエンドに送ってスタジオを解凍し、すべてのコレクションをStudyDTOに入れます。すべて正常に動作します。すべてのフィールドのデータはすべてsaveメソッドを呼び出すまで表示されますリポジトリから、この特定のエンティティのフィールドを除いて他のすべてのコレクションを保存します。
私は研究にStudySiteを追加した場合、Hibernate
は、それにIDを割り当て、それを保存しても、参加表に関係を保存し、私は再び研究を読み込むときに、それはStudySiteを示すが、空のフィールドとなります。
私は新しいものを挿入するか、私は既存のもの
を更新しようとした場合、私はまた、あなたがnullのように行くすべての値を鑑賞することができます休止状態からのバインディング変数を記録し、まだで保存するときにしている場合に、この問題が発生しました任意の提案は
PSを歓迎
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]
:テーブルに参加するには、割り当てられたIDとstudy_idを取得した私は、エラーを追跡するために行ってきた様々なものの中で、私は完全にエンティティとすべての参照を消去しますそれに(li quibase、everything)そして別の名前で作り直して、何も変わっていない。
public void setStudySites(Set<StudySites> studySites) {
studySites.stream().forEach(ss-> {
Set<Study> setStudys=ss.getStudys();
setStudys.add(this);
ss.setStudys(setStudys);
});
this.studySites = studySites;
}
がに削減する必要があります:これはあなたのセッターメソッド犯人であるが、私の意見であれば
これで試してみましたが、あなたはStudyDTOでそれらを設定するときに、研究のコレクションに研究を追加していません。ただし、他のすべてのManyToManyコレクションには同じセッターがあります。 – Steven