我在使用hibernate 进行分页查询时出现了这样的问题.
使用同一个条件对象DetachedCriteria ,
首先查询总记录行数
public Integer getResultRowsCount(DetachedCriteria deta) {
Criteria criteria = deta.getExecutableCriteria(getSession());
criteria.setProjection(Projections.rowCount());
Long rowCount = 0l;
rowCount = (Long) criteria.uniqueResult();
return rowCount.intValue();
}
然后查询当前页面记录
public List<T> findListByPaging(DetachedCriteria deta, int firstResult,
int pageSize) {
Criteria criteria = deta.getExecutableCriteria(getSession())
.setFirstResult(firstResult).setMaxResults(pageSize);
criteria.setProjection(null);// 去除统计行数条件
List<T> entities = null;
entities = criteria.list();
return entities;
}
使用中一直没有问题.直到有一次.使用了关联对象的属性作为查询条件
deta.createAlias("insProject", "project");
deta.add(Restrictions.eq("project.production.prodCode", prodCode);
查询结果发现这样一个问题.
返回结果的集合中,每一个子项都包含了两个对象.一个是要求的查询结果,另外一个则是关联对象
页面使用中都无法判断到底使用那一个.
后来发现需要在在查询记录的方法中添加设置
criteria.setResultTransformer(Criteria.ROOT_ENTITY); //将结果皆设置成原始数据