JDBC nos proporciona cursores tipo Scroll (soportados por algunas bases de datos eso si), para recorrer poco a poco una cantidad muy grande de filas en una determinada tabla; como es de suponer una consulta que recupere miles o millones de objetos, puede traerse abajo el sistema por falta de memoria; Estos cursores también están disponibles con Hibernate y los mismos son utilizados en forma objetual mediante la implementación del patrón iterable (regularmente en JDBC tenemos los métodos last(), first(), next(), previous, relative con los cuales nos movemos a través del ResultSet y este se encarga de encapsular la traída por demanda de los Rows. Dicho lo anterior, vamos al ejemplo con Hibernate: SessionFactory sessionFactory = this.getSessionFactory(); Session session = sessionFactory.openSession(); String sql = "from MyDomainObject"; // fetch all data. ScrollableResults results = null; Object [] objects = null; Transaction transaction = session.begin...