10.4.1.1. 迭代式获取结果(Iterating results)

某些情况下,你可以使用iterate()方法得到更好的性能。 这通常是你预期返回的结果在session,或二级缓存(second-level cache)中已经存在时的情况。 如若不然,iterate()会比list()慢,而且可能简单查询也需要进行多次数据库访问: iterate()会首先使用1条语句得到所有对象的持久化标识(identifiers),再根据持久化标识执行n条附加的select语句实例化实际的对象。

  1. // fetch ids
  2. Iterator iter = sess.createQuery("from eg.Qux q order by q.likeliness").iterate();
  3. while ( iter.hasNext() ) {
  4. Qux qux = (Qux) iter.next(); // fetch the object
  5. // something we couldnt express in the query
  6. if ( qux.calculateComplicatedAlgorithm() ) {
  7. // delete the current instance
  8. iter.remove();
  9. // dont need to process the rest
  10. break;
  11. }
  12. }