总和预测和结果约束 [英] Sum projection and results constraint
问题描述
$ b $ pre $ code Criteria cr = getSession()。createCriteria(Entity.class);
cr.setFirstResult(0);
cr.setMaxResults(20);
cr.setProjection(Projections.sum(propertyName));
Double sum = cr.uniqueResult();
但是条件返回所有实体的总和,因为setMaxResults(20)限制了总和值结果,并且这是一个对象 - uniqueResult。意味着建设是不正确的。如何使用标准正确地获得多个实体的总和?
如果您无法在ID上添加约束条件(例如 .add(Restrictions.le(id,20))
;如果ID的顺序是这样的话,这将起作用),那么我看到的唯一可能的解决方案是分成2个Criterias :
//首先,获取前20个元素的id
List< Integer> ids = session.createCriteria(Entity.class)
.setProjection(Projections.property(id))
.setMaxResults(20)
.list();
//然后,在所需字段上做一笔
Long sum =(Long)session.createCriteria(Entity.class)
.setProjection(Projections.sum(propertyName ))
.add(Restrictions.in(id,ids))
.uniqueResult();
I have 100 entities in db. I want to get sum by some property of first 20 entities
Criteria cr = getSession().createCriteria(Entity.class);
cr.setFirstResult(0);
cr.setMaxResults(20);
cr.setProjection(Projections.sum("propertyName"));
Double sum = cr.uniqueResult();
but criteria returns sum of all entities because setMaxResults(20) restricts sum values result and that is one object - uniqueResult. Mean that construction is incrorrect. How to get sum of several entities using criteria properly?
If you cannot add a constraint on the ID (e.g. .add(Restrictions.le("id", 20))
; this would work if the IDs are in order), then the only possible solution I see is to split in in 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();
这篇关于总和预测和结果约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!