簡體   English   中英

Hibernate中的條件以在列表中返回一些匯總結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM