最近用到统计,我一直用的是HQL,所以这次决定也采用HQL。(这里存在分页,所以必须有结果集的大小)
一般我们的查询方式是:
得到结果集的大小:
而我现在有个统计需求
这样得到的是一个对象数组,怎么才能得到结果集的大小呢?
这样写是不对的(已测试):
也不能用Query.list().size(),因为这样是查询数据库所有的记录,占内存,显然不行。
后来查了一些资料,发现了Query.iterate(),它返回的不是所有的记录,返回的是所有记录的ID(已测试),当你需要的时候,它才根据ID去查询其他的字段。
显然这就是我需要的。因此可以这样写来得到结果集大小,HQL:
程序里这样写
最后的count就是结果集的大小。
我感觉hibernate应该有提供好的解决方案。可能是我没找到,暂时这样用着。