2012-08-04 12 views
14

In JPQL kann ich abrufen Einheiten von:Wie werden nur bestimmte Felder einer Entität in JPQL oder HQL abgerufen? Was entspricht ResultSet in JPQL oder HQL?

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

Aber, wenn ich die ID und Namensfelder (nur) von der Kategorie Entität abrufen möchten, ich so etwas wie das Objekt ResultSet müssen, durch welche ich sagen: rs.getString("name") und rs.getString("id"). Wie geht das über JPQL, ohne die gesamte Entität abzurufen?

Grundsätzlich für eine wie Informationen aus einer Abfrage wie erhalten: select c.id,c.name from Category c?

Antwort

32

In HQL können Sie verwenden Liste() Funktion eine Liste von Object [] Array zu erhalten, die Ergebniszeilen enthält:

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

in zurückgegebene Array 1-st-Element wird id sein zweiter - Namen.

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

Wenn Sie Hibernate Criteria API verwenden möchten, sollten Sie Projections verwenden.

Mit JPA wird es auf die gleiche Weise arbeiten:

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

Ich sehe Abfragen wie: "Wählen Sie c.id, c.name aus Kategorie c" oft in JPA-Bücher, aber sie sagen Ihnen nie, wie Sie die Ergebnisse abrufen. Irgendeine Möglichkeit, dies zu tun, ohne Hibernate-spezifisch zu sein? – Daud

+1

Mit JPA wird es genauso funktionieren. Ich habe meiner Antwort ein Beispiel hinzugefügt. Beachten Sie jedoch, dass Sie, wenn Sie beispielsweise nur die Namensspalte auswählen, die Liste , nicht die Liste erhalten. – dimas

+0

Was ist die Variable 'session' in diesem Kontext? 'org.hibernate.Session' hat keine' createQuery' Methode, zumindest in 4.3. –

10

Es ist nicht die Verwendung der selbst .list() Funktion ist, die das Ergebnis ein List<Object[]> macht. Es ist die Spezifikation von Feldern (c.id, c.name) in der HQL-Abfrage. Wenn Ihre Abfrage

"select c from Category c" 

ist dann query.list() ein List<Category> Objekt zurück.