Jun 20

n+1统计解决办法 不指定

chirs , 02:32 , 瓜哇天地 » HIBERNATE , 评论(1) , 引用(0) , 阅读(3576) , Via 本站原创 | |
      业务场景,Department和Employee是一对多关系。现在我对Department进行分页查询,要求在显示的页面上同时显示每个Department中Employee的数量。这是一个很简单的业务场景,但是想象一下如何用hibernate进行映射?

      首先否定一种做法:hql:FROM Department department。然后针对每个department,去做department.getEmployees().size()。这样不仅会发送n+1条SQL,而且性能太低。

      我们肯定希望采用一句HQL解决问题,但是此时问题来了,当你试图做SELECT department, count(employee.id) FROM .....这样的HQL时,在Java端,发现没有一个合适的对象可以映射。

      从OO的角度,其实可以在Department这个类中加一个employeeSize来表示这种业务场景。但是好像Hibernate无法去做类似的映射。而iBatis在这个方面却灵活的多。

      可以用hql一句话写:
select new DepartmentView(d.poin,count(e.poin)) from Department d inner join d.employeeSet group by d.poin.
Tags: ,
牛弟
2008/06/20 17:43
周工发帖,必属精帖!我全都下载下来收藏了zancool
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]