2013-03-23 62 views
2

我在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。意味着建设是不正确的。如何正确使用标准获得多个实体的总和?

回答

5

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