我有一个hibernate查询,返回数以万计的对象结果。是否可以循环查询块而不是一次处理整个查询?
示例代码:
Query q = session.createQuery("FROM Class");
List<Class> classList = (List<Class>) q.list();
由于
答案 0 :(得分:1)
使用query.setMaxResults(int)和query.setFirstResult(int)翻阅查询。
通常你会编写一个方法来显示结果大小的第x页,其中y是每页的项目数:
public List<Thingy> showThingies(int itemsPerPage, int pageOffest){
// ..
query.setMaxResults(itemsPerPage);
query.setFirstResult(itemsPerPage * pageOffset);
// ..
}
答案 1 :(得分:1)
您可以使用hibernate中的ScrollableResults
类似的东西:
ScrollableResults results = session.createCriteria(Project.class)
.add(Restrictions.eq("projectType", Constants.REINDEX.PROJECT_TYPE))
.setFetchSize(10)
.scroll(ScrollMode.FORWARD_ONLY);
while (results.next()) {
project = (Project) results.get(0);
如果你正在浏览大量的实体,你可能也应该清除你的会话,从而你可能会耗尽内存。
更多信息可以在文档10.4.1.6. Scrollable iteration中找到,并且在他们编写时,如果您不希望连接保持打开,则应使用分页。