我在db中有100个实体.我想通过前20个实体的某些属性得到总和
Criteria cr = getSession().createCriteria(Entity.class);
cr.setFirstResult(0);
cr.setMaxResults(20);
cr.setProjection(Projections.sum("propertyName"));
Double sum = cr.uniqueResult();
Run Code Online (Sandbox Code Playgroud)
但是条件返回所有实体的总和,因为setMaxResults(20)限制和值结果,这是一个对象 - uniqueResult.意味着建筑是完全正确的.如何正确使用标准获得几个实体的总和?
如果你不能在ID上添加一个约束(例如.add(Restrictions.le("id", 20)),如果ID按顺序,这将有效),那么我看到的唯一可能的解决方案是分成2个Criterias:
// First, fetch first 20 elements' ids
List<Integer> ids = session.createCriteria(Entity.class)
.setProjection(Projections.property("id"))
.setMaxResults(20)
.list();
// Afterwards, do a sum on the desired field
Long sum = (Long) session.createCriteria(Entity.class)
.setProjection(Projections.sum("propertyName"))
.add(Restrictions.in("id", ids))
.uniqueResult();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7988 次 |
| 最近记录: |