@Override
 @SuppressWarnings("unchecked")
 public List<T> getCollection(String jpql, String[] attributes, Object[] params)
     throws DaoExceptions {
   if (!JPAHelper.validJpql(jpql)) {
     throw new DaoExceptions("JPQL语句不合法,请核实!");
   }
   if (attributes != null && attributes.length > 0) {
     StringBuilder builder = new StringBuilder();
     builder.append(" order by");
     for (String attribute : attributes) {
       builder.append(" o." + attribute + " ,");
     }
     String orderString = builder.substring(0, builder.lastIndexOf(","));
     jpql = jpql.substring(0, jpql.lastIndexOf("order")) + orderString;
   } else {
     if (jpql.indexOf("order") < 1) jpql += " order by o.id";
   }
   final Query query = entityManager.createQuery(jpql);
   if (null != params && params.length > 0) {
     for (int i = 0; i < params.length; i++) {
       query.setParameter(i + 1, params[i]);
     }
   }
   return query.getResultList();
 }
 @Override
 @SuppressWarnings("rawtypes")
 public int getCount(String jpql, T entity) throws DaoExceptions {
   if (jpql == null || jpql.length() <= 0) {
     jpql = "select count(o) from " + this.entityName + " o";
   }
   final Map map = JPAHelper.buildReflectJpql(jpql, entity);
   final Object[] params = JPAHelper.getParams(map);
   String JPQL = JPAHelper.getJpql(map);
   JPQL = JPQL.substring(0, JPQL.lastIndexOf("order"));
   final Query query = this.entityManager.createQuery(JPQL);
   if ((null != params) && (params.length > 0)) {
     for (int i = 0; i < params.length; i++) {
       query.setParameter(i + 1, params[i]);
     }
   }
   return Integer.parseInt(query.getSingleResult() + "");
 }
 @Override
 @SuppressWarnings({"rawtypes", "unchecked"})
 public List<T> getCollection(String jpql, T entity, String[] attributes, boolean pageFlag)
     throws DaoExceptions {
   if (jpql == null || jpql.length() <= 0) {
     jpql = "select o from " + this.entityName + " o";
   }
   if (!JPAHelper.validJpql(jpql)) {
     throw new DaoExceptions("JPQL语句不合法,请核实!");
   }
   final Map map = JPAHelper.buildReflectJpql(jpql, entity);
   String JPQL = JPAHelper.getJpql(map);
   Object[] params = JPAHelper.getParams(map);
   if (attributes != null && attributes.length > 0) {
     StringBuilder builder = new StringBuilder();
     builder.append(" order by");
     for (String attribute : attributes) {
       builder.append(" o." + attribute + " ,");
     }
     String orderString = builder.substring(0, builder.lastIndexOf(",")) + " desc";
     JPQL = JPQL.substring(0, JPQL.lastIndexOf("order")) + orderString;
   }
   final Query query = entityManager.createQuery(JPQL);
   if (null != params && params.length > 0) {
     for (int i = 0; i < params.length; i++) {
       query.setParameter(i + 1, params[i]);
     }
   }
   List<T> entities = new ArrayList<T>();
   if (pageFlag) {
     entities =
         query
             .setFirstResult(entity.getEndSize())
             .setMaxResults(entity.getPageSize())
             .getResultList();
   } else {
     entities = query.getResultList();
   }
   return entities;
 }