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