运用hibernate对oracle数据库中数据分页出现重复记录--Java学习网

时间:2015-12-11 6:37:49

  核心提示:使用hibernate对oracle数据库中数据分页出现重复记录发现分页出现了重复记录。原以为是自己程序出了问题,可仔细检查了程序之后,并没有发现有什么不对的地方,于是上网查了一下,原来是oracle...
使用hibernate对oracle数据库中数据分页出现重复记录 

发现分页出现了重复记录。原以为是自己程序出了问题,可仔细检查了程序之后,并没有发现有什么不对的地方,于是上网查了一下,原来是oracle
分页机制的问题,在oracle中,分页是通过rownum函数来实现的,
rownum顺序号的生成是排序后生成的,例如下面这条sql:
select * from user where rownum <= 20 and rownum > 10 order by userName
按照我们正常的理解,这条sql查询的是user表中按照userName升序后取其10~20条记录,
其实不然,oracle是排序后才生成rownum,理想情况下如userName在user表的值是唯一
的或者userName在数据库中被建了唯一索引,结果是正确的,但是如果userName的值存在
大量重复记录或者为空,就会出现问题重复记录的情况。正确的sql应该这样写:
select * from (select * from (select * from user order by userName) 
where rownum <= 20) where rownum >=10
但是这并不能从根本上解决问题,为了避免这种情况,建议慎用oracle的排序功能,
如果需要使用排序,一定要选择那些建有唯一索引的字段。当然有时候我们可能需要对
那些不是唯一索引的字段进行排序,这些字段的值可能大量重复也可能为空,怎么办,
这时候可以采用联合字段排序,也就是排序字段中包含一个主键或不会重复的字段。

Java免费学习   Java自学网 http://www.javalearns.com

关注微信号:javalearns   随时随地学Java

或扫一扫

随时随地学Java

作者:不详 来源:网络
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号