![](/img/trans.png)
[英]Hibernate criteria Using GROUP BY and RETURN ENTITY LIST
[英]Criteria in Hibernate to return some aggregated results in a List
這是我的代碼。 問題是我的結果列表總是返回大小1而不是預期的4。 該列表應包含max,min,avg,count的值。 感謝您的幫助
Criteria crit = session.createCriteria(Mastercsv.class);
Mastercsv mastercsv = new Mastercsv();
ProjectionList proList = Projections.projectionList();
proList.add(Projections.max("hostsCount"));
proList.add(Projections.min("hostsCount"));
proList.add(Projections.avg("hostsCount"));
proList.add(Projections.count("installedModule"));
crit.setProjection(proList);
crit.add(Restrictions.eq("installedModule", type));
crit.add(Restrictions.between("dateReported", startDate, endDate));
List results = crit.list();
那是對結果列表中項目的誤解。 列表的大小不受選擇數量(最大,最小,平均,計數)的影響。 在這種情況下,列表的預期大小為1,因為它是帶有聚合函數且沒有分組的簡單選擇。
列表中的唯一項是對象數組,該對象數組按選擇順序包含所有四個選定值。 結果可以通過以下方式進行瀏覽:
List results = crit.list();
for (Object item: results) {
Object[] itemArr = (Object[]) item;
System.out.println("max: "+ itemArr[0].getClass() +" " + itemArr[0]);
System.out.println("min: "+ itemArr[1].getClass() +" " + itemArr[1]);
System.out.println("avg: "+ itemArr[2].getClass() +" " + itemArr[2]);
System.out.println("count: "+ itemArr[3].getClass() +" " + itemArr[3]);
}
然后,可以在了解數組的類型時分配它們的值。 例如,如果hostsCount
類型為Integer,則可以使用以下內容:
Integer max = (Integer) itemArr[0];
因為眾所周知查詢不會返回多行,所以我們可以使用Criteria.list代替:
Object[] itemArr = (Object[]) crit.uniqueResult();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.