Criteria分页查询消除重复行

[size=large][color=red][b]如果您发现内容含有错误或公司内部信息,请予以指出,本人不胜感激。。。。[/b][/color][/size]

[size=large]业务要求:查询出所有除角色为管理员以外的所有用户[/size]


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;

}

[size=large][color=red]这样返回的结果就是用户表所映射的用户对象[/color][/size]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章