2012-08-04 12 views
14

In JPQL, posso recuperare le entità da:Come recuperare solo determinati campi di un'entità in JPQL o HQL? Qual è l'equivalente di ResultSet in JPQL o HQL?

query = entityManager.createQuery("select c from Category c"); 
List<Category> categories = query.getResultList(); 

Ma, se voglio recuperare i campi ID e il nome (solo) dell'entità Categoria, ho bisogno di qualcosa come l'oggetto ResultSet, attraverso il quale posso per esempio: rs.getString("name") e rs.getString("id"). Come fare questo attraverso JPQL, senza recuperare l'intera entità?

Fondamentalmente, per un come recuperare informazioni da una query come: select c.id,c.name from Category c?

risposta

32

In HQL è possibile utilizzare l'elenco() per ottenere un elenco di Object [] array che contiene le righe di risultati:

Query query = session.createQuery("select c.id,c.name from Category c"); 
List<Object[]> rows = query.list(); 

in tornato elemento della matrice 1-st sarà id, secondo - nome.

for (Object[] row: rows) { 
    System.out.println(" ------------------- "); 
    System.out.println("id: " + row[0]); 
    System.out.println("name: " + row[1]); 
} 

Se si desidera utilizzare criteri di API di Hibernate, è necessario utilizzare Projections.

con JPA funzionerà allo stesso modo:

List<Object[]> rows = entityManager.createQuery(queryString).getResultList(); 
+0

Vedo query come: "selezionare c.id, c.name da Category c" spesso nei libri JPA, ma non ti dicono mai come recuperare i risultati. Qualunque modo di farlo senza essere in Hibernate specifico? – Daud

+1

Con JPA funzionerà allo stesso modo. Ho aggiunto un esempio alla mia risposta. Tuttavia, tieni presente che se sceglierai, ad esempio, solo la colonna del nome, otterrai l'elenco , non l'elenco . – dimas

+0

Qual è la variabile 'session' in questo contesto? 'org.hibernate.Session' non ha un metodo' createQuery', almeno nella 4.3. –

10

Non è l'uso della funzione .list() stesso che rende il risultato un List<Object[]>. È la specifica dei campi (c.id, c.name) nella query HQL. Se la query è

"select c from Category c" 

Poi query.list() restituirà un oggetto List<Category>.