【Hibernate】框架分頁出現兩頁資料重複問題
阿新 • • 發佈:2018-12-18
【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