いくつかの 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」句は無視され、戦術的な価格ルールに一致するセット全体がコレクション内に含まれます。
サブセレクト フェッチ タイプにも同じことが当てはまります。
ありがとう、
ダン