私は以下のマッピングを持っています
1ユーザは0以上のロールを持つことができます。ユーザーからの
1対多フェッチに参加多くの関係が同じエンティティを複数回返す
クエリ
uはu.roles
User1は二つの役割RoleAとRoleBを持っている場合は
を取得し、JOIN。次に、User1が2回返されます。
私はUser1を返すべきですRoleAとRoleBを含むロールのリストを1回
どうすればこの問題を解決できますか?
また、多対多関係の動作についても説明してください。コードの下
私は以下のマッピングを持っています
1ユーザは0以上のロールを持つことができます。ユーザーからの
1対多フェッチに参加多くの関係が同じエンティティを複数回返す
クエリ
uはu.roles
User1は二つの役割RoleAとRoleBを持っている場合は
を取得し、JOIN。私はUser1を返すべきですRoleAとRoleBを含むロールのリストを1回
どうすればこの問題を解決できますか?
また、多対多関係の動作についても説明してください。コードの下
JPAの仕様を参照してください。4.4.5.3
SELECT d FROM Department d LEFT JOIN FETCH d.employees WHERE d.deptno = 1
A参加フェッチは同じを持っています対応する内部としてのセマンティクスまたは外部結合としての 外部結合としてセマンティクスを結合する結合操作の右側の で指定された関連オブジェクトがクエリ に返されないか、クエリ内で参照されていないことを確認してください。したがって、たとえば、 部門1に5人の従業員がある場合、上記の問合せでは、部門1エンティティへの参照が5つ返されます( )。
オプション
SELECT
句にDISTINCT
を追加することができます。EntityGraph
を定義し、 フィールドにroles
フィールドを追加します。これはフェッチされます。つまり、クエリから"FETCH JOIN"
を省略します。roles
フィールドをEAGERとしてマークしますが、これはそのフィールドのすべてのフェッチに適用されるため、望ましいとは限りません。ユーザー:詳細については
criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
は、このリンクをチェックしてください。 Hibernate Criteria returns children multiple times with FetchType.EAGER
ユーザー - >役割 - >権限が多対多の場合はどうなりますか。 条件:setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);結果を期待通りに返しますか? – Piyush
エンティティグラフチップに感謝します。 http://stackoverflow.com/questions/39507887/behavior-of-distinct-root-entityにお答えください – Piyush