Search code examples
hibernateormhqljpql

How to retrieve only certain fields of an entity in JPQL or HQL? What is the equivalent of ResultSet in JPQL or HQL?


In JPQL, I can retrieve entities by :

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

But, if I wish to retrieve the id and name fields (only) of the Category entity, I need something like the ResultSet object, through which I can say : rs.getString("name") and rs.getString("id"). How to do this through JPQL, without retrieving the entire entity ?

Basically, for a how to retrieve information from a query like : select c.id,c.name from Category c ?


Solution

  • In HQL you can use list() function to get a list of Object[] array that contains result rows:

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

    in returned array 1-st element will be id, second - name.

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

    If you want to use hibernate's Criteria API, you should use Projections.

    With JPA it will work the same way:

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