2017-02-24 21 views
0

我有一個預先定義的查詢/ JPA操作PSQL/JPA:從返回OCCURENCES的名單<> Ocurrences到地圖<Date, List<>>每日期

jpaOperations.findByQuery(ActivityCountByCategory.class, 
"SELECT NEW ActivityCountByCategory(u.text, count(1)) 
FROM Activity a JOIN a.groupCategories c, UserDefinedCode u 
WHERE (u.id.code = c AND u.id.entityName='AKTOR_AKTIVITET' AND u.id.fieldName='KATEGORI') 
AND a.closedIndicator = 'F' GROUP BY u.text, u.lineNo ORDER BY u.lineNo"); 

返回名爲ActivityCountByCategory DTO的的名單重寫查詢包含一個活動的名稱和一個表示數據庫中出現的數字。 該方法因此返回所有時間的單個活動的數量。

UserDefinedCode 

表是定義爲使得活性存在於AKTOR_AKTIVITET和具有從由UserDefinedCode表示的第二表中引用,使得名稱的ID - 部分從活動去耦。

我需要擴展此查詢,這樣我可以傳遞一個日期FROM日期和時間TODATE並使其返回某種形式的List<Object[]>Map<Date, List<ActivityCountByCategory>>,使而不是一次返回所有出現的,我可以在出現分裂成個別日期between fromDate and toDate並將每個返回列表映射到一個特定的日期。

回答

0

我重寫了本地SQL查詢和編輯的DTO佔日期爲好,然後做在支持bean Java代碼的一些解析:

public List<ActivityCountByCategory> getCreatedUserDefinedActivityCountByDate(Date fromDate, Date toDate) { 

     Query query; 
     query = entityManager.createNativeQuery("SELECT" + 
       " trunc(a.dato), fcode.TEXT, COUNT(1) FROM ACTIVITY a INNER JOIN ACTIVITY_CATEGORY act_cat ON a.ID=act_cat.ACTOR_ID INNER JOIN " + 
       "user_defined_code fcode ON fcode.kode = act_cat.category where ... " + 
       "AND trunc(a.DATO) BETWEEN :fromDate AND :toDate GROUP BY trunc(a.dato), fcode.TEXT , fcode.lineNo ORDER BY fcode.lineNo "); 
     query.setParameter("fromDate", fromDate); 
     query.setParameter("toDate", toDate); 

     List<Object[]> resultList = query.getResultList(); 
     List<ActivityCountByCategory> list = new ArrayList<>(); 
     for (Object[] result : resultList) { 
      list.add(new ActivityCountByCategory((String) result[1], (Number) result[2], (Date) result[0])); 
     } 
     return list; 
    } 
相關問題