我正在创建一个繁重的HQL查询并尝试对其进行优化。有一个表Product
,需要为每个产品计算一些统计信息,我们称之为stat
。我正在尝试这种查询来同时获取所有产品及其统计信息(这是一个简化的查询,真正的查询要复杂得多):
select new map(min(product) as prod, sum(somestat) as stat)
from Product product
left join product.stats somestat
group by product.id, product.name
order by product.name
但是,当我尝试执行此类查询时,首先执行主选择,然后执行X次SELECT product.* FROM product WHERE product.id=?
选择返回的每个产品。
有没有办法让第一个查询的结果能够创建那些产品实例?
提前致谢。
答案 0 :(得分:0)
如果你想要整个产品,那么hibernate已经做了唯一合理的事情:执行N + 1选择。您碰巧按主键分组,因此理论上可以想象这样做,但即使在SQL中,也不允许选择任何未在分组中使用的列。无论如何,这种自定义技巧超出了诸如Hibernate之类的ORM。