一次处理部分查询

时间:2010-10-29 15:04:52

标签: java hibernate

我有一个hibernate查询,返回数以万计的对象结果。是否可以循环查询块而不是一次处理整个查询?

示例代码:

Query q = session.createQuery("FROM Class");


List<Class> classList = (List<Class>) q.list();

由于

2 个答案:

答案 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中找到,并且在他们编写时,如果您不希望连接保持打开,则应使用分页。