2010-02-05 124 views
4

有人可以帮我完成/清理这个查询。我想首先获取表中的行数,然后我需要实际获取一组行。我不知道如何使用相同的条件实例来执行这两个查询。有些帮助休眠条件查询

,以获取数我有这样的事情:

Criteria criteria = session.createCriteria(MyTable.class); 
criteria.setProjection(Projections.rowCount()); 
Integer count = (Integer) criteria.uniqueResult(); 
int numRows = count.intValue(); 

而获取的行(我只需要为分页目的的子集):

Criteria criteria = session.createCriteria(MyTable.class); 
criteria.setFirstResult(offset); 
criteria.setMaxResults(limit); 
criteria.addOrder(Order.desc(orderBy.toString())); 
List<MyType> myType = criteria.list(); 

难道我首先需要空取出投影或类似的东西,以便我可以使用条件来获取行(在执行计数之后)?

我想帮助清理一下,这样我就可以有效地执行这两个查询,并最终获得总行数和结果列表。谢谢!!

回答

6

您需要清除计数投影并设置结果转换器来检索MyTable对象。试试这个第二查询:

criteria.setProjection(空)

criteria.setResultTransformer(Criteria.ROOT_ENTITY);

1

你在问计数和投影重复使用相同的标准,是否正确?我找不到办法做到这一点,所以我一直在用自己的方法建立标准和限制,并将其构建两次,一次用于计数,一次用于数据页面。如果有更好的方法,我全部耳朵...

+0

是的..这就是我最终做的以及现在..感谢输入 – oym 2010-02-05 21:55:55