How to retrieve only certain fields of an entity in JPQL or HQL? What is the equivalent of ResultSet in JPQL or HQL?
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();
It is not the use of the .list()
function itself which makes the result a List<Object[]>
. It is the specification of fields (c.id, c.name
) in the HQL query. If your query is
"select c from Category c"
Then query.list()
will return a List<Category>
object.
You can also directly map to the class
public class UserData {
private String name;
private Date dob;
private String password;
//setter
}
public UserData getUserData() {
String queryString = "select user.name as name, user.dob as dob, user.userses.password as password from UserProfile user where user.userEmailId='[email protected]'";
Query query = sessionFactory.getCurrentSession().createQuery(queryString);
query.setResultTransformer(Transformers.aliasToBean(UserData.class));
return query.uniqueResult();
}