2012-08-04 17 views
14

En JPQL, que puede recuperar entidades por:¿Cómo recuperar solo ciertos campos de una entidad en JPQL o HQL? ¿Cuál es el equivalente de ResultSet en JPQL o HQL?

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

Pero, si quiero recuperar los campos id y name (solamente) de la entidad Categoría, necesito algo así como el objeto ResultSet, a través del cual pueda decir: rs.getString("name") y rs.getString("id"). ¿Cómo hacer esto a través del JPQL, sin recuperar toda la entidad?

Básicamente, una manera de recuperar información de una consulta como: select c.id,c.name from Category c?

Respuesta

32

En HQL puede función list() se utiliza para obtener una lista de matriz Object [] que contiene filas de resultados:

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

en elemento de la matriz 1-st devuelta será Identificación, segundo - nombre.

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

Si desea utilizar la API Criterios de hibernación, se debe utilizar Projections.

Con APP que funcionará de la misma manera:

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

veo consultas como: "seleccione c.id, c.name de la categoría c" a menudo en los libros de la APP, pero nunca tell u cómo recuperar los resultados. ¿Alguna forma de hacerlo sin ser específico de Hibernate? – Daud

+1

Con JPA funcionará de la misma manera. Agregué un ejemplo a mi respuesta. Pero tenga en cuenta que si, por ejemplo, selecciona solo la columna de nombre, obtendrá la Lista , no la Lista . – dimas

+0

¿Qué es la variable 'session' en este contexto? 'org.hibernate.Session' no tiene un método' createQuery', al menos en 4.3. –

10

No es el uso de la función .list() en sí, que hace que el resultado de una List<Object[]>. Es la especificación de los campos (c.id, c.name) en la consulta HQL. Si la consulta es

"select c from Category c" 

Entonces query.list() devolverá un objeto List<Category>.