由于一些 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”子句都将被忽略,并且与战术价格规则匹配的整个集合都包含在集合中。
同样适用于子选择提取类型。
谢谢,
担