Java 一次处理一部分查询

Java 一次处理一部分查询,java,hibernate,Java,Hibernate,我有一个hibernate查询,它返回10个成千上万的对象结果。是否可以循环查询的各个部分,而不是一次处理整个查询 示例代码: Query q = session.createQuery("FROM Class"); List<Class> classList = (List<Class>) q.list(); Query q=session.createQuery(“来自类”); List classList=(List)q.List(); 感谢使用和浏览查询

我有一个hibernate查询,它返回10个成千上万的对象结果。是否可以循环查询的各个部分,而不是一次处理整个查询

示例代码:

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


List<Class> classList = (List<Class>) q.list();
Query q=session.createQuery(“来自类”);
List classList=(List)q.List();
感谢使用和浏览查询

通常,您会编写一个方法,显示结果大小的第x页,其中y是每页的项目数:

public List<Thingy> showThingies(int itemsPerPage, int pageOffest){
    // ..
    query.setMaxResults(itemsPerPage);
    query.setFirstResult(itemsPerPage * pageOffset);
    // ..
}
public List showThingies(int itemsPerPage,int pageOffest){
// ..
query.setMaxResults(itemsPerPage);
query.setFirstResult(itemsPerPage*pageOffset);
// ..
}
您可以使用来自hibernate的

比如:

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);
如果您在大量实体中滚动,您可能还应该时不时地清除会话,否则可能会耗尽内存

更多信息可以在文档中找到,在他们编写文档时,如果不希望连接保持打开状态,则应使用分页