如何将hibernate查询结果作为列表或hashmap的关联数组获取

ama*_*ntu 14 java struts hibernate

我正在开发struts 2和hibernate 3中的应用程序.

我有3张桌子

  1. 检查
  2. InspectionMission
  3. 时间线

Inspection与...相关联InspectionMissionInspectionMission与之相关联Timeline.

现在我有以下问题.我在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();

}
Run Code Online (Sandbox Code Playgroud)

我想获取结果如下

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";
Run Code Online (Sandbox Code Playgroud)

等等,以便我可以在jsp struts中显示它,如下所示:

在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>
Run Code Online (Sandbox Code Playgroud)

这里有人能帮帮我吗?

小智 32

你必须使用"新地图"语法(Hibernate Reference第14.6段)

select new map(count(i.inspectionId) as tot_inspections, t.year as year, t.quarter as quarter) from ...
Run Code Online (Sandbox Code Playgroud)

查询的其余部分是相同的.这将返回一个映射列表,其中键是"列"的别名.

  • 您好 Salvatore Insalaco,感谢您的回答。我过去两天一直在寻找这个解决方案,你的答案为我提供了它。感谢您的完美回答。 (2认同)
  • 有人请发布这个hibernate主题的链接. (2认同)