在大量研究发现这个可行的解决方案后,我遇到了同样的问题。
对于我的 HQL 查询,我想获得 POJO 列表的输出,但我得到的是 Object 列表。 这是获取 POJO 类列表的方法。
可以通过两种方式实现:
Query query = em.createNativeQuery(sqlQuery, Picking.class);
OR
查询查询 = em.createQuery(sqlQuery);
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));
}
}
其他情况也可以参考这个链接:https://www.tabnine.com/code/java/methods/javax.persistence.Query/getResultList