hibernate的setFirstResult(a),setMaxResults(b)后,不按照一定顺序取值
用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的数据的。
实在不知道为什么,请高手指教。
非常感谢。
比如没有分页之前顺序是,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的数据的。
实在不知道为什么,请高手指教。
非常感谢。
...全文
相关推荐
Hibernate中的query 分页.doc
本文将探讨Hibernate中两种主要的分页方式:`query.scroll()`和使用`query.setFirstResult(), query.setMaxResults()`。
宠物医院管理系统毕业设计:从数据库设计到SSH框架部署全解析
在JavaWeb开发中,信息管理系统是经典的实践方向,而围绕垂直行业的管理系统更是毕业设计与课程设计的高频选题。这类系统的核心在于理清业务角色与数据流转:从宠物档案、挂号记录到诊疗处方与收费结算,每一环都需要严谨的数据库设计和清晰的分层架构。基于SSH框架(Struts2+Spring+Hibernate)与MySQL的经典组合,系统能够实现角色权限隔离、业务闭环处理与数据聚合统计,既满足了教学场景对技术栈完整性的要求,又具备实际工程的可操作性。从环境搭建、SQL初始化到功能模块实现,再到常见问题的排查思路
Spring Hibernate实现分页功能
二、Hibernate 的查询机制Hibernate 提供了多种查询机制,包括 HQL(Hibernate Query Language)、Criteria、Native SQL 等。
Hibernate中的Criteria的认识
在深入探讨Hibernate框架中Criteria API的使用之前,我们先简要了解一下Hibernate本身。
hibernate分页技术
**Query接口的setFirstResult和setMaxResults方法** 这是实现分页最常用的方式。


