【问题标题】:Sum projection and results constraint总和投影和结果约束
【发布时间】:2013-03-23 15:10:04
【问题描述】:

我在 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。表示构造不正确。如何正确使用标准获得多个实体的总和?

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    如果您无法在 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();
    

    【讨论】:

      猜你喜欢
      • 2019-04-11
      • 1970-01-01
      • 2018-12-01
      • 2011-09-30
      • 2015-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多