1. 程式人生 > >【Hibernate】框架分頁出現兩頁資料重複問題

【Hibernate】框架分頁出現兩頁資料重複問題

【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