2009-05-29 9 views
11

Sto sviluppando un'applicazione in montanti 2 e 3. ibernazioneCome recuperare risultato di domanda di sospensione come array associativo di elenco o hashmap

Ho 3 tabelle

  1. ispezione
  2. InspectionMission
  3. Timeline

Inspection è associato InspectionMission e InspectionMission sono associati a Timeline.

Ora ho il seguente problema. Ho scritto seguente query in 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(); 

} 

voglio ai risultati Visualizza come segue

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

e così via in modo che possa visualizzarlo in puntoni jsp come segue:

In JSP I Ho scritto il seguente codice

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

Qualcuno può aiutarmi?

risposta

27

è necessario utilizzare la sintassi "nuova mappa" (Hibernate Riferimento paragrafo 14,6)

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

Il resto della query è la stessa. Ciò restituirà un elenco di mappe, in cui la chiave è l'alias della "colonna".

+1

Ciao Salvatore Insalaco, Grazie per la risposta. Stavo cercando gli ultimi 2 giorni per questa soluzione e la tua risposta me l'ha fornita. Grazie per la risposta perfetta. – amar4kintu

+0

Questo era esattamente ciò di cui avevo bisogno, ma non riuscivo a trovarlo nei documenti di Hibernate. – wprl

+0

Davvero eccezionale, grazie –

1

Un'altra soluzione sarebbe quella di definire un oggetto dati solo per visualizzare quei risultati e lasciare che Hibernate crei istanze di quelli al volo. Questa classe avrebbe solo bisogno di un costruttore corrispondente.

classe Esempio (getter e campi omesso)

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

La query avrebbe quindi cercare

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 

Come risultato si otterrebbe un List di InspectionCount s.

Problemi correlati