2

Form、FormConfig、および GroupForms の 3 つのエンティティ間の関係に次の問題があります。モデルは Form と GroupForms の間の manyToMany 関係ですが、この結合に関連付けられた追加データがいくつかあるため、エンティティ FormConfig をモデル化しました。Form は FormConfig と OneToMany の関係で関連付けられ、GroupForms は FormConfig と OneToMany の関係で関連付けられます。コードでは次のようになります。

フォーム.java:

...
@OneToMany(mappedBy = "form", cascade = CascadeType.ALL)
private List<FormConfig> formConfigs = new ArrayList<FormConfig>();
...

GroupForms.java:

...
@OneToMany(mappedBy="group", fetch=FetchType.EAGER)
private List<FormConfig> formConfigs = new ArrayList<FormConfig>();

フォーム構成:

...
@ManyToOne
@JoinColumn(name = "kf_grupa_id")
private GroupForms group;

@ManyToOne
@JoinColumn(name = "kf_formularz_id")
private Form form;
....

グループを作成しましたが、新しいフォームを作成して GroupForms に参加させたいので、次のようにします。

void createFormInGroup(GroupForms groupForms) {
   Form form = new Form();
   /*setters execution*/    
   form.set(..);
   ....
   FormConfig formConfig = new FormConfig();
   /*setters execution*/
   formConfig.set(..);
   ....
   formConfig.setGroup(groupForms);
   formConfig.setForm(form);
   form.getFormConfigs().add(formConfig);
   groupForms.getFormConfigs().add(formConfig);

   /* code responsible for beginTransaction */
   session.saveOrUpdate(formConfig);
   session.saveOrUpdate(form);
   session.saveOrUpdate(groupForms);
   /* code responsible for endTransaction */
}

この関数を 1 つのグループに対して 2 回呼び出します。つまり、2 つのフォームを作成する必要があり、それらのフォームは 1 つのグループに含める必要があります。残念ながら、hibernate を使用したクエリでは、エンティティ GroupForms に 2 つの行が返されます。テーブルを確認しましたが、エンティティ GroupForms に関連付けられたテーブルには 1 行しかありません。誰でもそれを手伝ってもらえますか?休止状態がデータベースに存在するよりも多くの GroupForms を返す理由がわかりません。

よろしく

4

1 に答える 1

2

これは、次のことが原因である可能性が最も高いです。

@OneToMany(mappedBy="group", fetch=FetchType.EAGER)

詳細については、こちらを参照してください。

Hibernate Criteria は FetchType.EAGER で子を複数回返します

ここで同様の質問に対する私の答え:

同じアイテムを複数回返す Hibernate と基準

于 2013-10-28T20:46:13.707 に答える