我正在對來自休眠的一組結果執行分頁。目前,我做將休眠結果的子列表
long count = getCountResultForNamedQuery();
List result = getResultForNamedQuery()
,其中兩個查詢類似
select count(*) from addresses where country = 'USA';
和
select * from addresses where country = 'USA';
對於分頁我平時更新getResultForQuery所以這是有.setFirstResult和setMaxResult設置。這將只會返回我想要的部分。我必須做一個計數,以便知道頁面的分頁部分需要顯示多少頁面。
我想知道我是否可以更有效率。我可以嗎
List result = getResultForQuery();
int count = result.size();
List subResult = result.subList(start, end);
這是否有意義?我試圖只在可能的情況下調用一個查詢。問題是多麼聰明的休眠是?當我調用size時,它會計算它返回的對象shell,還是試圖解決所有問題,然後點擊數據庫?哪種模式更好?
道歉,如果例子不夠清楚。我試圖儘可能簡化它,可能已經簡化了它太多!
在此先感謝!
感謝您的回答。我想這回答我的問題。我不確定是否所有的美國地址都會被加載。我的理解是,Hibernate只返回對象的外殼,然後當代碼實際訪問時,explicitley檢索每個字段。我不確定size()會在結果列表上做什麼 - 因此我的問題 – RNJ
我真的建議你在使用Hibernate進行開發時打開SQL日誌記錄。這會讓你明白Hibernate何時執行查詢,執行哪些查詢,以及如何避免不必要的查詢。 –