2013-03-23 61 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();