Criteria分页查询消除重复行
如果您发现内容含有错误或公司内部信息,请予以指出,本人不胜感激。。。。
业务要求:查询出所有除角色为管理员以外的所有用户
public Pagination findUserList(final Pagination pagination , final String param){ final List result = this.getHibernateTemplate().executeFind(new HibernateCallback() {public Object doInHibernate(final Session session)throws HibernateException, SQLException {Criteria criteria = DetachedCriteria.forClass(AmUserRole.class).getExecutableCriteria(session);Criteria userCriteria = criteria.createCriteria("amUser");Criteria roleCriteria = criteria.createCriteria("amRole"); //去除角色为管理员的用户roleCriteria.add(Restrictions.not(Expression.in( "roleId",new Long[]{0L}))); userCriteria.add(Restrictions.like("name", "%"+param+"%"));//userCriteria.add( //Restrictions.like("username", //param,MatchMode.ANYWHERE); //查询去除重复行后的总记录数userCriteria.setProjection(Projections.countDistinct("userId")); //hibernate3.0以后返回的是Long型Integer totalCount = (Integer) criteria.uniqueResult(); ProjectionList projectionList = Projections.projectionList(); //决定返回的结果projectionList.add(Projections.property("amUser")); criteria.setProjection(Projections.distinct(projectionList));userCriteria.addOrder(Order.asc("name")); //判断是否需要分页 if(pagination.getPageSize() <= 0) { return criteria.list(); }else{ if(0 == pagination.getItemCount()) { System.out.println("totalCount---->"+totalCount); pagination.setItemCount(totalCount); } int pageSize = pagination.getPageSize(); int pageNo = pagination.getCurrentPage(); int startIndex = pageSize * (pageNo - 1); criteria.setFirstResult(startIndex); criteria.setMaxResults(pageSize); pagination.setPageSize(pageSize); pagination.setCurrentPage(pageNo); return criteria.list(); }}}); pagination.setItemList(result);return pagination;}