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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章