2017-02-14 6 views
0

したがって、多くのコレクションを持つ主体の中に、多くのエンティティとコレクションを持つ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; 
    } 

がに削減する必要があります:これはあなたのセッターメソッド犯人であるが、私の意見であれば

答えて

0

、最初に私はちょうどALL代わりのPERSISTcascadeTypeを変更し、それは大丈夫、それは同じ形で異なる研究にStudySiteの同じインスタンスをマージする必要はありませんでしたすべての時間を働いていました。だから、いくつかの考えの後で、基本的な問題は、Many to Manyの関係では、Hibernateが新しく作成されたエンティティを保存し、少なくとも私たちが行っていた方法ではなく、結合テーブルに関係を保存するとは期待できないということです。

は、だから、僕は、ユーザーが何であったか、フォーム全体

のために保存当たると結合テーブルにそれを保存し、その後最初にそれを保存し、ユーザーが新しいエンティティを作成する必要があるモーダルを開くと、デザインを微調整しました以前に起こったことはHibernateは新しいフィールドを永続化できませんでしたが、結合テーブルにリレーションを保存していたため、空のフィールドを持つIDが生成されました。

0

わからない

public void setStudySites(Set<StudySites> studySites) { 
     this.studySites = studySites; 
    } 

コレクションのトラバーサルと設定Studysエンティティ、私はいくつかのリポジトリ/サービスメソッドを処理するために出発するだろう。私は最終的にこの問題を解決するために管理

+0

これで試してみましたが、あなたはStudyDTOでそれらを設定するときに、研究のコレクションに研究を追加していません。ただし、他のすべてのManyToManyコレクションには同じセッターがあります。 – Steven

関連する問題