0

いくつかの HQL クエリによって大きなデカルト積が生成されるため、パフォーマンスの問題が発生しています。これを回避するために、コレクションを遅延フェッチしようとしていますが、結果のコレクションに where 句を適用する良い方法が見つかりません。

元の HQL クエリの簡易バージョン

SELECT TPR 
FROM TacticalPriceRule
INNER JOIN FETCH TPR.tacticalPriceRuleDurations TPRD
LEFT JOIN FETCH TPR.tacticalPriceRuleCountryOfOrigins as TPRCOO  
LEFT JOIN FETCH TPR.tacticalPriceRuleType as TPRT  
LEFT JOIN FETCH TPR.tacticalPriceRuleCars as TPRC  
WHERE
     TPRD.duration.min <= :duration and TPRD.duration.max >= :duration
     .... more conditions on other joins

これにより、いくつかの小さなテーブルでほぼ 100 万行になります。理想的ではありません。

遅延初期化を使用してこれを行おうとすると、「where」または「with」句は無視され、戦術的な価格ルールに一致するセット全体がコレクション内に含まれます。

サブセレクト フェッチ タイプにも同じことが当てはまります。

ありがとう、

ダン

4

0 に答える 0