2010-02-05 196 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