我有一個hibernate查詢,它返回數以千計的對象結果10s。是否可以循環查詢塊而不是一次處理整個查詢?同時使用查詢的一部分
示例代碼:
Query q = session.createQuery("FROM Class");
List<Class> classList = (List<Class>) q.list();
感謝
我有一個hibernate查詢,它返回數以千計的對象結果10s。是否可以循環查詢塊而不是一次處理整個查詢?同時使用查詢的一部分
示例代碼:
Query q = session.createQuery("FROM Class");
List<Class> classList = (List<Class>) q.list();
感謝
使用query.setMaxResults(int)和query.setFirstResult(int)通過查詢頁面。
通常你會寫一個顯示結果的大小,其中y是每頁項目數的第x頁的方法:
public List<Thingy> showThingies(int itemsPerPage, int pageOffest){
// ..
query.setMaxResults(itemsPerPage);
query.setFirstResult(itemsPerPage * pageOffset);
// ..
}
你可以從休眠使用ScrollableResults
喜歡的東西:
ScrollableResults results = session.createCriteria(Project.class)
.add(Restrictions.eq("projectType", Constants.REINDEX.PROJECT_TYPE))
.setFetchSize(10)
.scroll(ScrollMode.FORWARD_ONLY);
while (results.next()) {
project = (Project) results.get(0);
如果通過實體的巨大ammount的滾動你應該也清楚從一段時間到另一段時間,否則你可能會耗盡內存。
有關更多信息,請參閱文檔10.4.1.6. Scrollable iteration,並且在他們編寫它時,如果您不希望連接保持打開狀態,則應該使用分頁。