2009-05-29 5 views
11

Estoy desarrollando una aplicación en soportes 2 y 3. hibernaciónCómo traiga resultado de la consulta de hibernación como matriz asociativa de lista o HashMap

Tengo 3 tablas

  1. Inspección
  2. InspectionMission
  3. La línea de tiempo

Inspection se está asociada con InspectionMission y InspectionMission se asocia con Timeline.

Ahora tengo el siguiente problema. He escrito siguiente consulta en 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(); 

} 

quiero ir a buscar el resultado de la siguiente manera

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"; 

y así sucesivamente para que pueda visualizarlo en puntales JSP de la siguiente manera:

En JSP I han escrito el siguiente código

<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> 

¿Alguien puede ayudarme aquí?

Respuesta

27

usted tiene que utilizar el "nuevo mapa" sintaxis (Hibernate referencia el párrafo 14,6)

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

El resto de la consulta es el mismo. Esto devolverá una lista de mapas, donde la clave es el alias de la "columna".

+1

Hola Salvatore Insalaco, Gracias por la respuesta. Estuve buscando los últimos 2 días para esta solución y tu respuesta me la proporcionó. Gracias por la respuesta perfecta. – amar4kintu

+0

Esto era exactamente lo que necesitaba, pero no pude encontrar en los documentos de Hibernate. – wprl

+0

Realmente genial, gracias –

1

Otra solución sería definir un objeto de datos solo para mostrar esos resultados y dejar que Hibernate cree instancias de ellos sobre la marcha. Esta clase solo necesitaría un constructor que coincida.

clase Ejemplo (captadores y campos omitido)

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

La consulta se parecería

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 

Como resultado se obtendría un List de InspectionCount s.

Cuestiones relacionadas