【Hibernate】框架分页出现两页数据重复问题

本文探讨了在无唯一键的表中进行分页查询时遇到的问题,如数据重复,并提出了通过添加主键和排序来解决的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【table】结构

   表中没有唯一键

create or replace table
(
    name1 varchar(100),
    name2 varchar(100),
    qty1  int
)

【第一页查询】

   在Hibernate框架中经常会使用到框架本身的分页查询功能,下面是查询表【table】的所有数据,

   备注:表【table】没有【唯一】键

String hql = "select * from table";
Query query = session.createQuery(hql);
query.setFirstResult((page - 1) * rows);
query.setMaxResults(rows);

【转换SQL】

  查询第一页数据时会由框架本身将HQL语句转为SQL脚本获取数据

//page: 1 , rows:10
select * from table where rownum < 10

【第二页查询】

  在查询数据的外面又重新套了一层查询,在没有【主键】这样的查询的结果的顺序会重新排列,那么这一页的数据就有可能是第一页出现过的,这样会导致两页数据【重复】的情况

//page:2 , rows: 10

select rownum row_num,a.* from (select * from table) a where row_num>10 and row_num<=20

【解决方案】

   1. 在表【table】中加上主键ID

   2. 在查询数据的后面加上排序  

select * from table order by name1,name2

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值