/** * 根据条件查询实体指定字段的值并回填到实体内. <br> * <b>注意:</b> <br> * 实体必须有包括要查询的字段为参数的构造函数. */ private <T extends BaseDto> QueryResult<T> scroll( Class<T> entityClass, String[] queryfields, int firstindex, int maxresult, String wherejpql, Object queryParams, LinkedHashMap<String, String> orderby) { QueryResult<T> qr = new QueryResult<T>(); String entityname = sqlBuilder.getEntityName(entityClass); String where = ""; if (wherejpql != null) { if (wherejpql.length() > 0) { where = "WHERE " + wherejpql; } } Query query = getEntityManager() .createQuery( (sqlBuilder.buildSelect(entityname, queryfields, "o") + "FROM " + entityname + " o " + where + sqlBuilder.buildOrderby(orderby))); setQueryParams(query, queryParams); if (firstindex != -1 && maxresult != -1) query .setFirstResult(firstindex) .setMaxResults(maxresult) .setHint("org.hibernate.cacheable", true); qr.setResultlist(query.getResultList()); query = getEntityManager() .createQuery( "SELECT COUNT(" + sqlBuilder.getPkField(entityClass, "o") + ") FROM " + entityname + " o " + where); setQueryParams(query, queryParams); qr.setTotalrecord((Long) query.getSingleResult()); return qr; }