2012-04-20 27 views
0

我想等價JPA查詢寫入以下MySQL查詢如何JPA查詢寫入相當於MySQL查詢

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

實體類是用戶。

我想使用JPA的createQuery()。

任何人都可以告訴我或給我的鏈接在哪裏可以找到解決方案。

+0

你好可以任何一個給我的答覆....... – saru 2012-04-20 08:53:27

回答

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(duration),SUM(charge),COUNT(activePackage)FROM RaBdrRating WHERE callType =:callType and startDate BETWEEN:startDate AND: endDate GROUP BY activePackage「,RaBdrRating.class); List listOfPackages = uQuery.getResultList(); return listOfPackages; – saru 2012-04-20 08:57:39

+0

您是否先嚐試標準? – JMelnik 2012-04-20 10:04:24

+0

是的,我試過,也是它也給了exception.But我的要求是我只能使用TypedQuery。 – saru 2012-04-20 10:39:59