QBC的Distinct查詢

  1. 分頁中有重複記錄統計總的條數
  • int total = ((Integer)criteria.setProjection(Projections.countDistinct("id")).uniqueResult()).intValue();

          執行後的語句 select count(distcint id) from  table;

  • 沒有重複記錄的時候

          int total = ((Integer)criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();

          執行後的語句 select count(*) from  table;

 

      2.  查詢結果除掉重複的記錄

  •  第一種是數據庫的distinct

          ProjectionList projectionList = Projections.projectionList();
          projectionList.add(Projections.property("id"));
          projectionList.add(Projections.property("name")); 
          criteria.setProjection(Projections.distinct(projectionList));

          執行的sql語句   SQL: select distinct id, name from table;

 

          criteria.setProjection(Projections.distinct(Projections.property("id")));

          執行的sql語句   SQL: select distinct id from table;

 

  • 第二種是在結果集中通過hibernate去重,對大量數據效率太低,如果是分頁查詢還是不能用這種的,因爲它是查詢後的出重。

          criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

 

      3.Criteria的結果集

         Criteria的結果集最常用分兩種:對象List、List<Object[]>(投影查詢)


發佈了55 篇原創文章 · 獲贊 10 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章