JPA: ¿cuál es el patrón adecuado para iterar sobre grandes conjuntos de resultados?

Digamos que tengo una tabla con millones de filas. Usando JPA, ¿cuál es la forma correcta de iterar sobre una consulta en esa tabla, de modo queNo tengo todas las listas en memoria con millones de objetos?

Por ejemplo, sospecho que lo siguiente explotará si la tabla es grande:

List<Model> models = entityManager().createQuery("from Model m", Model.class).getResultList();

for (Model model : models)
{
     System.out.println(model.getId());
}

Es paginación (bucle y actualización manualsetFirstResult()/setMaxResult()) realmente la mejor solución?

Edita: el caso de uso principal al que me dirijo es un tipo de trabajo por lotes. Está bien si lleva mucho tiempo correr. No hay cliente web involucrado; Solo necesito "hacer algo" para cada fila, una (o una pequeña N) a la vez. Solo trato de evitar tenerlos todos en la memoria al mismo tiempo.

Respuestas a la pregunta(13)

Su respuesta a la pregunta