10.4.1.6. 可滚动遍历(Scrollable iteration)

如果你的JDBC驱动支持可滚动的ResuleSetQuery接口可以使用ScrollableResults,允许你在查询结果中灵活游走。

  1. Query q = sess.createQuery("select cat.name, cat from DomesticCat cat " +
  2. "order by cat.name");
  3. ScrollableResults cats = q.scroll();
  4. if ( cats.first() ) {
  5. // find the first name on each page of an alphabetical list of cats by name
  6. firstNamesOfPages = new ArrayList();
  7. do {
  8. String name = cats.getString(0);
  9. firstNamesOfPages.add(name);
  10. }
  11. while ( cats.scroll(PAGE_SIZE) );
  12. // Now get the first page of cats
  13. pageOfCats = new ArrayList();
  14. cats.beforeFirst();
  15. int i=0;
  16. while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );
  17. }
  18. cats.close()

请注意,使用此功能需要保持数据库连接(以及游标(cursor))处于一直打开状态。 如果你需要断开连接使用分页功能,请使用setMaxResult()/setFirstResult()