3

我在数据库中有 100 个实体。我想通过前 20 个实体的某些属性得到总和

Criteria cr = getSession().createCriteria(Entity.class);
cr.setFirstResult(0);
cr.setMaxResults(20);
cr.setProjection(Projections.sum("propertyName"));
Double sum = cr.uniqueResult();

但是条件返回所有实体的总和,因为 setMaxResults(20) 限制总和值结果,这是一个对象 - uniqueResult。表示构造不正确。如何正确使用标准获得多个实体的总和?

4

1 回答 1

6

如果您无法在 ID 上添加约束(例如.add(Restrictions.le("id", 20));如果 ID 是有序的,这将起作用),那么我看到的唯一可能的解决方案是分成 2 个标准:

// 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();
于 2013-03-24T00:08:33.507 回答