2009-05-29 79 views
11

我發展的支柱2和應用程序的關聯數組冬眠3.如何獲取hibernate的查詢結果列表或HashMap的

我有3個表

  1. 檢驗
  2. InspectionMission
  3. 時間軸

Inspection與相關聯0和InspectionMissionTimeline相關聯。

現在我有以下問題。我在HQL

public List getQuartewiseInspectionList(){ 

    Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

    Query q = session.createQuery(
       "select count(i.inspectionId) as tot_inspections,t.year,t.quarter" + 
       " From Inspection as i " + 
       " inner join i.inspectionMission as im inner join im.timeline as t" + 
       " GROUP by t.year,t.quarter"); 

    return q.list(); 

} 

我想獲取引起寫下面的查詢如下

result[0][tot_inspections] = "6" 
result[0][year] = "2009"; 
result[0][quarter] = "Q2"; 

result[1][tot_inspections] = "3" 
result[1][year] = "2009"; 
result[1][quarter] = "Q3"; 

等等,這樣我可以在JSP支柱如下顯示它:

在JSP中我寫下面的代碼

<table border="1"> 

    <s:iterator value="result" status="status"> 
     <tr class="<s:if test="#status.even">even</s:if><s:else>odd</s:else>"> 
      <td class="nowrap"><s:property value="tot_inspections" /></td> 
      <td class="nowrap"><s:property value="year" /></td> 
      <td class="nowrap"><s:property value="quarter" /></td> 
     </tr>   
    </s:iterator> 
</table> 

任何人都可以幫助我嗎?

回答

27

您必須使用「新地圖」語法(Hibernate參考段落14.6)

select new map(count(i.inspectionId) as tot_inspections, t.year as year, t.quarter as quarter) from ... 

查詢的其餘部分是相同的。這將返回一個映射列表,其中鍵是「列」的別名。

+1

Hello Salvatore Insalaco, 感謝您的回答。我正在尋找最後2天這個解決方案,你的答案提供給我。 感謝您的完美答案。 – amar4kintu 2009-05-29 12:14:18

1

另一個解決方案是定義一個數據對象來顯示這些結果,並讓Hibernate快速創建這些實例。這個類只需要一個匹配的構造函數。

實例類(getter和領域略)

public class InspectionCount() { 
    // fields 
    public InspectionCount(int count, int year, int quarter) { 
     // initialize instance 
    } 
    // getters 
} 

查詢會再看看

select new InspectionCount(count(i.inspectionId), t.year, t.quarter) 
     from Inspection as i 
     inner join i.inspectionMission as im inner join im.timeline as t 
     group by t.year,t.quarter 

因此,你會得到InspectionCountList秒。

相關問題