예제 #1
0
 /**
  * 根据条件查询实体指定字段的值并回填到实体内. <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;
 }