2012-06-01 86 views
3

我正在努力正確使用聚合語句如countDistinct。我發現了一些聚合查詢的例子,但沒有一個是從countDistinct開始到結束執行的。在JPA Criteria API中正確使用聚合語句API

我已經試過這樣:

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)都是非法的。如果有人能指引我走向正確的方向,那將會很棒。

謝謝

回答

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(); 
+0

啊哈,使得現在感覺:)謝謝,stemm – kostja