将“新映射”结果绑定到Hibernate中的对象

时间:2013-01-28 15:06:13

标签: java hibernate optimization query-optimization

我正在创建一个繁重的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=?选择返回的每个产品。

有没有办法让第一个查询的结果能够创建那些产品实例?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果你想要整个产品,那么hibernate已经做了唯一合理的事情:执行N + 1选择。您碰巧按主键分组,因此理论上可以想象这样做,但即使在SQL中,也不允许选择任何未在分组中使用的列。无论如何,这种自定义技巧超出了诸如Hibernate之类的ORM。