问题描述
我在JSF中写一个分页查询
分别调用DAO 中的 获取所有记录数 和 返回指定页数的结果集
public int countByCriteria(final DetachedCriteria dc) {
Integer count = (Integer) getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException ,SQLException{
if (log.isDebugEnabled()) {
log.debug("countByCriteria dc=" + dc);
}
Criteria criteria = dc.getExecutableCriteria(session);
return criteria.setProjection(Projections.rowCount())
.uniqueResult();
}
}, true);
if (count != null) {
return count.intValue();
} else {
return 0;
}
}
public List findByCriteria(final DetachedCriteria dc,
final int firstResult, final int maxResults) {
return (List) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(final Session session)
throws HibernateException {
if (log.isDebugEnabled()) {
log.debug("findByCriteria dc=" + dc);
}
Criteria criteria = dc.getExecutableCriteria(session);
criteria.setFirstResult(firstResult);
criteria.setMaxResults(maxResults);
return criteria.list();
}
}, true);
}
结果出错了 在控制台打印的结果
- 返回记录集的是正确的 select count(*) from 表名 where 条件
- 但是执行查询记录列表的时候 却变成 select * from (select count(*) from 表名 where 条件) where rownum< ?
去掉 1, 2就成功了,增加 1 的话 返回自然不是结果级 是一个 int
大家帮我看看 是不是 criteria 没有释放掉 session 没有释放掉
要如何处理
谢谢 万分感谢