3

データベースに 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) は結果の合計値を制限し、それが 1 つのオブジェクト (uniqueResult) であるため、基準はすべてのエンティティの合計を返します。構造が間違っていることを意味します。基準を適切に使用して複数のエンティティの合計を取得する方法は?

4

1 に答える 1

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();
于 2013-03-24T00:08:33.507 に答える