DetachedCriteria 分页Projection取消聚合条件

mac2022-06-30  69

@Override     public PageBean findPaginated(DetachedCriteria detachedCriteria,PageBean pageBean) {         // TODO 今天记得修改 去掉DetachedCriteria中的projection         //根据该条件获得总记录数        Long total=this.getRowCount(detachedCriteria);        List<T> datas=this.findByCriteria(detachedCriteria, pageBean.getOffset(), pageBean.getPageSize());         pageBean.setDatas(datas);         pageBean.setTotal(total);         return pageBean;     }      // 使用指定的检索标准获取满足标准的记录数     public Long getRowCount(final DetachedCriteria detachedCriteria) {         return getHibernateTemplate().execute(new HibernateCallback() {             @Override             public Object doInHibernate(Session session)                     throws HibernateException, SQLException {                 Criteria criteria=detachedCriteria.getExecutableCriteria(session);                 CriteriaImpl criteriaImpl=(CriteriaImpl) criteria;                 Projection projection=criteriaImpl.getProjection();                 logger.debug("SQL:"+Projections.rowCount());                 Long totalCount=(java.lang.Long) criteria.setProjection(Projections.rowCount()).uniqueResult();                 criteria.setProjection(projection);                 if(projection==null){                     criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);                 }                 return totalCount;             }         });

    }

  public List findByCriteria(DetachedCriteria criteria, int firstResult,             int maxResults) {         return getHibernateTemplate().findByCriteria(criteria, firstResult,                 maxResults);     }

这个问题纠结我好长时间,每次查询出来总行数后,在查询就不能查询实体的信息了即使setProjectinos为null,但是查询出来的结果在有关联的情况下是List<Object[]>类型的

也就是说DetachedCriteria本身还是有问题,具体的原因我说不出来.但是这也是一种解决方案.希望对大家也有所帮助,

这样就可以将DetachedCriteria进行封装,在分页条件下查询总行数,

转载于:https://www.cnblogs.com/J2EEPLUS/archive/2011/11/13/2487917.html

相关资源:Hibernate - DetachedCriteria 的完整用法
最新回复(0)