首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Criteria分页查询化除重复行

2013-11-09 
Criteria分页查询消除重复行如果您发现内容含有错误或公司内部信息,请予以指出,本人不胜感激。。。。业务要求:

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;}

这样返回的结果就是用户表所映射的用户对象

热点排行