和投影和结果约束

Naw*_*awa 3 java hibernate

我在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.意味着建筑是完全正确的.如何正确使用标准获得几个实体的总和?

Rau*_*ene 6

如果你不能在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)