I faced the same issue after a lot of research found this working solution.
For my HQL Query, I wanted to get the output of the POJO List, but I was getting a List of Object. This is how you can get the list of your POJO class.
Can achieve this in two ways:
Query query = em.createNativeQuery(sqlQuery, Picking.class);
OR
Query query = em.createQuery(sqlQuery);
Working Example of NativeQuery:
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@PersistenceContext
protected EntityManager em;
private <T> List getPickingQuery(Map<String, String> searchFields, Map<String, String> orderByFields,
Pageable pageable, String status) {
List resultList = new ArrayList();
try {
String sql = "select * from picking where status = '" + status + "'";
String sqlQuery = createQuery(sql, searchFields, orderByFields);
Query query = em.createNativeQuery(sqlQuery, Picking.class);
setQueryParam(sqlQuery, searchFields);
query.setMaxResults(pageable.getPageSize());
query.setFirstResult((int) pageable.getOffset());
log.info("Query " + query);
resultList = query.getResultList();
} catch (Exception e) {
log.error("Error " + e.getMessage());
}
return resultList;
}
private String createQuery(String sql, Map<String, String> searchFields, Map<String, String> orderByFields) {
for (String paramName : searchFields.keySet()) {
sql = sql.concat(" and " + paramName + " = ?");
}
if (orderByFields != null) {
if (orderByFields.containsKey("key") && orderByFields.containsKey("order"))
sql = sql.concat(" order by " + orderByFields.get("key") + " " + orderByFields.get("order"));
else if (orderByFields.containsKey("key"))
sql = sql.concat(" order by " + orderByFields.get("key"));
}
return sql;
}
private void setQueryParam(String sqlQuery, Map<String, String> searchFields) {
int param = 1;
for (String paramName : searchFields.keySet()) {
query.setParameter(param++, searchFields.get(paramName));
}
}
You can also refer to this link for other cases: https://www.tabnine.com/code/java/methods/javax.persistence.Query/getResultList