hibernate的setFirstResult(a),setMaxResults(b)后,不按照一定顺序取值
悟空在此 2009-01-18 04:56:40 用Hibernate分页的时候,当sort的字段里的值基本相等时候,分页的结果会出现数据重复和丢失。
比如没有分页之前顺序是,1,2,3,4,5,6,7,8,9.(其实按照sort字段排序的话,这些数据顺序基本是一样的,就是大部分是不分顺序的。)
分页后就会出现:第一页(1,2,4,),第二页(3,2,5),第三页(7,8,9),其中2重复了,而6丢失了。
仔细分析代码后,发现错误在Query的setFirstResult,setMaxResults里。
代码如下:
Query query = entityManager.get().createQuery(q.toString());
for (String key : params.keySet()) {
query.setParameter(key, params.get(key));
}
List queryListA = query.getResultList(); //此语句用来测试,查出来的结果和数据库里吻合。
query.setFirstResult(first);
query.setMaxResults(count);
List queryListB = query.getResultList(); //此语句用来测试,当执行了setFirstResult,setMaxResults语句后,问题就会出现。如果sort字段是能够按照一定顺序排序的话,分页没有问题,但是如果sort字段值基本相等,则就会出错。
例如:假设没有分页之前,queryListA里得到的值顺序:1,2,3,4,5,6,7,8,9,10。。。。,那么在执行setFirstResult(0),setMaxResults(4)后,queryListB得到的值:2,1,4,3;而并不是1,2,3,4(随着数据库值不同,得到的结果也不一样)
也就是说,setFirstResult(first);setMaxResults(count);后,并不是按照查询出来的结果顺序,从first开始取到count的数据的。
实在不知道为什么,请高手指教。
非常感谢。