首页 Hibernate通过sql分页查询出现重复有关问题

Hibernate通过sql分页查询出现重复有关问题

举报
开通vip

Hibernate通过sql分页查询出现重复有关问题Hibernate通过sql分页查询出现重复有关问题 Hibernate通过sql分页查询出现重复问题 Java code // 分页方法 public List getMoreSql(String hql, Pager pager) { if (pager == null) pager = new Pager(); String sortStr = ; int sortIndex = hql.indexOf( order by ); if (sortIndex 0) { sortStr = h...

Hibernate通过sql分页查询出现重复有关问题
Hibernate通过sql分页查询出现重复有关问 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 Hibernate通过sql分页查询出现重复问题 Java code // 分页方法 public List getMoreSql(String hql, Pager pager) { if (pager == null) pager = new Pager(); String sortStr = ; int sortIndex = hql.indexOf( order by ); if (sortIndex 0) { sortStr = hql.substring(sortIndex + 8).trim();//截取order by 以后的字符串 ,即排序的字段 hql = hql.substring(0, sortIndex);//截取order by 以前的字符串 } if (null != pager.getSortStr() ! .equals(pager.getSortStr())) sortStr = pager.getSortStr(); pager.setSortStr(sortStr); String newSql = ; if ( .equals(sortStr)) newSql = hql; //无排序字段 else newSql = hql + order by + sortStr;//有排序字段 Session session = getSession(); String str = newSql.substring(newSql.indexOf( from ));//截取from 开始到最后的所有字符,为查询总共的行数 int count = calCountSql(hql);//总共的行数 pager.setRows(count);//设置行数 int limit = 0;//当前查询的起始行数 if (pager.getPageIndex() 0) limit = pager.getPageSize() * (pager.getPageIn if (pager.getPageIndex() pager.getPageCounts()) { limit = pager.getPageSize() * (pager.getPageCounts() - 1); pager.setPageIndex(pager.getPageCounts()); } limit = limit 0 ? 0 : limit; List list = session.createSQLQuery(newSql).setFirstResult(limit).setMaxResults(pager.getPage Size()).list(); releaseSession(session); return list; } // 分页对象 package hzl.input.util; public class Pager { /**总行数*/ private int rows; /**总页数*/ private int pageCounts; /**第几页*/ private int pageIndex; /**每页显示行数*/ private int pageSize; private String pageStr; /**排序字段*/ private String sortStr; public Pager() { super(); this.rows = 0; this.pageCounts = 0; this.pageIndex = 1; this.pageSize = 8; } public int getRows() { return rows; } public void setRows(int rows) { this.rows = rows; } public int getPageCounts() { pageCounts = getRows() / getPageSize() + ((getRows() % pageSize) 0 ? 1 : 0); pageCounts = pageCounts 1 ? 1 : pageCounts; return pageCounts; } public void setPageCounts(int pageCounts) { this.pageCounts = pageCounts; } public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public String getSortStr() { return sortStr; } public void setSortStr(String sortStr) { this.sortStr = sortStr; } } 上面是自己写的sql分页查询方法,但是发现在执行的过程中出现问题,到第4、5页的时候会出现重复的记录,以后的每一页也都会重复出现固定条数的记录,但是记录总数量和当前页数都是对的 哪一位大侠给指点指点,上面的代码哪里有问题~先谢谢了 ------解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 -------------------------------------------------------- 再加一个排序, 应该是那个字段那里的值为空或者都是一样的, 你就再加上一个排序, 如 ID, 肯定就会不一样了 ------解决方案-------------------------------------------------------- newSql = hql + order by + sortStr;//有排序字段 你就在这里 sortStr, 加上一个字段咯, newSql = hql + order by + sortStr + , id desc ;//有排序字段 ------解决方案-------------------------------------------------------- 应该是那个字段那里的值为空或者都是一样的, 例如, 按分数高低排, 80分的有40个人, 但是, 你那设置分页的是10条 所以这一段就至少有4页, 而这里你又没有再设置其它的排序方式, 所以它这里就自动先出来一些, 你分页的时候, 它也就先找原来出来的那些数据咯, 一直到, 这边界外, 才会出现其它的数据 ------解决方案-------------------------------------------------------- 前些日子项目中我也遇到这个问题,问下LZ用的SQL Server数据库并且有多个外连接查询, 如果那样的话我知道原因,那是因为sql server 使用top来进行数据分页的,而hibernate生成的语句只对第一个查询运行top
本文档为【Hibernate通过sql分页查询出现重复有关问题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_447713
暂无简介~
格式:doc
大小:19KB
软件:Word
页数:6
分类:生活休闲
上传时间:2018-02-05
浏览量:42