2009-05-29 102 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秒。