这是我的代码。问题是我的结果列表总是返回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();
答案 0 :(得分:1)
这是对结果列表中项目的误解。列表的大小不受选择数量(最大值,最小值,平均值,计数)的影响。在这种情况下,列表的预期大小为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();