和投影和结果约束

时间:2013-03-23 15:10:04

标签: 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();

但是条件返回所有实体的总和,因为setMaxResults(20)限制和值结果,这是一个对象 - uniqueResult。意味着建筑是完全正确的。如何正确使用标准获得几个实体的总和?

1 个答案:

答案 0 :(得分: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();