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
?
The Hibernate Query Language (HQL) and Java Persistence Query Language (JPQL) are both object model focused query languages similar in nature to SQL. JPQL is a heavily-inspired-by subset of HQL. A JPQL query is always a valid HQL query, the reverse is not true however.
Hibernate Query Language (HQL) Instead of table name, we use class name in HQL. So it is database independent query language.
Keywords like SELECT, FROM, and WHERE, etc., are not case sensitive, but properties like table and column names are case sensitive in HQL.
openSession(); Transaction tx = session. beginTransaction(); Query query = session. createQuery("select and so on.."); // set parameter values, e.g. // query. setString("name", "Matthias"); List result = query.
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();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With