Hibernate Criteria分页查询消除重复行

本文介绍如何使用Criteria查询方式,在不包含管理员角色的前提下,进行用户数据的分页检索,返回的对象是用户表对应的实体类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务要求:Hibernate 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;

	}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值