2012-06-01 1 views
3

Я борюсь за правильное использование агрегатных операторов, таких как countDistinct. Я нашел несколько примеров для агрегированных запросов, но ни один из них не запускается от начала до конца с использованием countDistinct.Правильное использование агрегированных операторов в JPA Критерии 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

 Смежные вопросы

  • Нет связанных вопросов^_^