2012-04-20 1 views
0

Я хочу написать эквивалентный запрос JPA к следующему MySQL QueryКак написать JPA запрос к эквивалентному MySQL Query

select active_package,sum(duration),sum(charge),count(*) 
    from User 
    where call_type="MO" 
     and start_date between '2012-02-01' and '2012-02-09' 
    group by active_package; 

Для JPA запроса соответствующих атрибутов находятся ниже.

activePackage, CALLTYPE, продолжительность заряда, STARTDATE

Entity класс пользователя.

Я хочу использовать createQuery() JPA.

Может ли кто-нибудь сказать мне или дать мне ссылку, где я могу найти решение для этого.

+0

привет может кто-нибудь дать мне ответ ....... – saru

ответ

1

Попробуйте это, он должен работать, если нет, прокомментируйте, мы получим его работу :).

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
CriteriaQuery<Tuple> cq = cb.createQuery(Tuple.class); 

Root<User> entity = cq.from(User.class); 
cq.multiselect(entity.get("activePackage"), 
     cb.sum(entity.get("duration").as(Long.class)), 
     cb.sum(entity.get("charge").as(Double.class), 
     cb.count(entity).as(Long.class))); 
cq.where(cb.equal(entity.get("callType"), "MO"), 
     cb.between(entity.get("startDate").as(Date.class), 
     new Date(), new Date())); 
cq.groupBy(entity.get("activePackage")); 

List<Tuple> resultList = entityManager.createQuery(cq).getResultList(); 
    for (Tuple result : resultList) { 
     System.out.println(result.get(0) + " " + result.get(1) 
       + " " + result.get(2) + " " + result.get(3)); 
} 

Кроме того, если вы хотите, чтобы фильтровать только по дате, но имеет метку времени в вашей модели, вы можете проверить это Compare date's date part only with Timestamp in Hibernate ответа.

Также JPA обеспечивает построение классов результатов как возвращаемых значений, поэтому вы можете группировать столбцы. Read more.

+0

Я использую запрос jpa следующим образом, но я получаю java.lang.IllegalArgumentException: не удается создать TypedQuery для запроса с более чем одним возвратом Исключение Запрос выглядит как ниже: TypedQuery uQuery = (TypedQuery ) entityManager.createQuery ("SELECT activePackage, SUM (продолжительность), SUM (платно), COUNT (activePackage) FROM RaBdrRating WHERE callType =: callType и startDate МЕЖДУ: startDate И: endDate GROUP BY activePackage ", RaBdrRating.class); Список listOfPackages = uQuery.getResultList(); return listOfPackages; – saru

+0

Вы сначала пробовали критерии? – JMelnik

+0

Да, я попробовал это, и он также дает исключение. Но мое требование - я должен использовать только TypedQuery. – saru

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