2012-03-15 9 views
9

特定のレコードを取得するためにHQLクエリを使用しています。 LEFT JOIN FETCHを使用すると、ターゲットエンティティにあるコレクションに重複レコードが含まれます。私が左結合のみを使うと、それはできません。私は、Hibernateがレコードを遅延ロードするときに重複を避けると思います。左結合フェッチを使用した重複

私のエンティティテーブルAがTablePVへのリンク(LEFTがz.attributeX PVをFETCH JOINを)している
"SELECT z FROM ", TableA.TABLE_NAME, " z ", // 
      "LEFT JOIN FETCH z.attributeX pv ", // 
      "LEFT JOIN FETCH pv.attributeY anteil ", // 
      "LEFT JOIN FETCH z.attributeB kma ", // 
      "LEFT JOIN FETCH kma.attributeC ", // 
      "WHERE anteil.attributeD.attributeE.id = :eId ", // 
      "AND pv.attributeG.id = :gId "); 

TablePVはTableyののコレクション(「LEFT pv.attributeYのanteilをFETCH JOINを)今

を持っていますHibernateは、TablePVの子を除いてすべて正しくマップしますが、同じレコードが何度も含まれていますテーブル内の重複はありませんので手動で削除することができます。

+0

など、お問い合わせにDISTINCTをお試しください。あなたのコレクションにセットを使用してください。 –

+0

AFAIK LEFT JOIN FETCHと制限は相互に排他的です。制限がコレクションの要素をフィルタリングして熱心に取得する可能性があるからです。たぶんあなたの根本的な原因が異なる – Firo

+0

あなたの答えをありがとう。 Setは問題を解決しますが、回避策であり、他の問題が発生します(例:注文)。大文字小文字が合理的であるかどうかわからない。レコードを同じクエリでフェッチし、別のselectステートメントでフェッチしないようにします。これは、FETCHなしでLEFT JOINのみを使用した場合に発生します。 – Daniel

答えて

-1

SELECT DISTINCT z FROM Entity z...

+3

私の質問で述べたように、これはトリックをしません。問題は、コレクションには主体自体ではなく重複が含まれていることです。 – Daniel

関連する問題