Java Persistence with
Hibernate的
537页提供了一个使用的解决方案
ScrollableResults,但是,仅适用于Hibernate。
因此,似乎需要使用
setFirstResult/
setMaxResults和手动迭代。这是我使用JPA的解决方案:
private List<Model> getAllModelsIterable(int offset, int max){ return entityManager.createQuery("from Model m", Model.class).setFirstResult(offset).setMaxResults(max).getResultList();}然后,像这样使用它:
private void iterateAll(){ int offset = 0; List<Model> models; while ((models = Model.getAllModelsIterable(offset, 100)).size() > 0) { entityManager.getTransaction().begin(); for (Model model : models) { log.info("do something with model: " + model.getId()); } entityManager.flush(); entityManager.clear(); em.getTransaction().commit(); offset += models.size(); }}


