2016-05-20 2 views
0

LocTypeと呼ばれる30個の要素とLocProfileと40個の要素を持つ@OneToMany関係のクラスがあります。ユーザーが場所を選択するとLocTypeProfileを関連付ける必要があるかどうかを計算する必要があるため、jsp側で利用できるようにする必要があります。フェッチを使用してHibernate Eagerのロードをレプリケートする

私は、以下のようにEager初期化の関係を定義すると、LocTypeから要素を取得すると、リストに1対多関係が格納されているインスタンスが30個の要素になります。

select lt from LocTypes lt left join fetch lt.locTypeProfiles 

をフェッチ今、私は良い練習

@OneToMany(mappedBy = "creditTypes") 

の利益のためにレイジーローディングへのマッピングを変更し、使用してクエリを実行しようとした場合

@OneToMany(fetch = FetchType.EAGER, mappedBy = "LocType ", cascade = CascadeType.ALL) 
private List<LocTypeProfile > locTypeProfiles; 

私は40個の要素を取得しますデータは平坦化されます。

私の質問は、このシナリオでEager初期化の動作を再現する方法はありますか?

答えて

1

OneToManyリレーションシップでjoin fetchを実行する場合は、select文でdistinctを使用する必要があります。そうでない場合は、フェッチされた各行に対してエンティティが作成されます。

試してみてください。

select distinct lt from LocTypes lt left join fetch lt.locTypeProfiles 

参考:One-To-Many relationship gets duplicate objects whithout using “distinct”.Why?

関連する問題