过滤懒惰的初始化集合

时间:2012-07-27 14:16:03

标签: java hibernate hql cartesian-product

由于某些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”子句,并且匹配战术定价规则的整个集合都包含在集合中。

同样适用于subselect fetch类型。

谢谢,

0 个答案:

没有答案