- 分頁中有重複記錄統計總的條數
- 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[]>(投影查詢)