2010-10-29 83 views
3

我有一個hibernate查詢,它返回數以千計的對象結果10s。是否可以循環查詢塊而不是一次處理整個查詢?同時使用查詢的一部分

示例代碼:

Query q = session.createQuery("FROM Class"); 


List<Class> classList = (List<Class>) q.list(); 

感謝

回答

1

使用query.setMaxResults(int)query.setFirstResult(int)通過查詢頁面。

通常你會寫一個顯示結果的大小,其中y是每頁項目數的第x頁的方法:

public List<Thingy> showThingies(int itemsPerPage, int pageOffest){ 
    // .. 
    query.setMaxResults(itemsPerPage); 
    query.setFirstResult(itemsPerPage * pageOffset); 
    // .. 
} 
1

你可以從休眠使用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,並且在他們編寫它時,如果您不希望連接保持打開狀態,則應該使用分頁。

相關問題