4

のような集計ステートメントの適切な使用に苦労していますcountDistinct。集計クエリの例をいくつか見つけましたが、を使用して最初から最後まで実行される例はありませんcountDistinct

私はこれを試しました:

    final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
    final CriteriaQuery<MyClass> query = criteriaBuilder.createQuery(MyClass.class);

    final Root<MyClass> root = query.from(MyClass.class);

    final Predicate yearPredicate = criteriaBuilder.equal(root.get("year"), currentYear);
    query.select(root);
    query.where(yearPredicate);

    final Expression<Long> count = criteriaBuilder.countDistinct(root);

ここが私が立ち往生している場所です。countDistinctルートで実行するのは正しいですか? どうすれば結果を取得できますか? query.select(count);でありcriteriaBuilder.countDistinct(query)、どちらも違法です。誰かが私を正しい方向に向けることができれば、それは素晴らしいことです.

ありがとうございました

4

1 に答える 1

3

うまくいけば、これはあなたを助けるはずです:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<Long> countCriteriaQuery = builder.createQuery( Long.class );
countCriteriaQuery.select( builder.countDistinct( countQuery.from( MyClass.class ) ) );

TypedQuery<Long> countQuery = entityManager.createQuery( countCriteriaQuery );
int totalObjectsNumber = countQuery.getSingleResult().longValue();
于 2012-06-01T07:31:41.280 に答える