Java列表无法检索超过90.000个元素

Java列表无法检索超过90.000个元素,java,hibernate,Java,Hibernate,当我试图从数据库中检索大量记录时,我正在处理一个问题。似乎当记录量超过90.000时,无法检索元素 发生这种情况时,我会遇到以下异常: com.sun.jdi.ObjectCollectedException occurred while retrieving value. 我使用的代码如下所示: Session objSession; List<GroupEntity> colResults; objSession = this.objSessionFactory.openSes

当我试图从数据库中检索大量记录时,我正在处理一个问题。似乎当记录量超过90.000时,无法检索元素

发生这种情况时,我会遇到以下异常:

com.sun.jdi.ObjectCollectedException occurred while retrieving value.
我使用的代码如下所示:

Session objSession;
List<GroupEntity> colResults;
objSession = this.objSessionFactory.openSession();
try
{
    objQuery = objSession.createQuery("FROM GroupEntity WHERE (strDomain = :Domain)")
        .setParameter("Domain",  strDomain)
        .list();
}
catch (Exception objException)
{
    throw new GroupException("Could not retrieve the list of WebFiltering groups to scan");
}
objSession.close();
return colResults;
会话对象;
列出结果;
objSession=this.objSessionFactory.openSession();
尝试
{
objQuery=objSession.createQuery(“来自GroupEntity,其中(strDomain=:域)”)
.setParameter(“域”,strDomain)
.list();
}
捕获(异常对象异常)
{
抛出新的GroupException(“无法检索要扫描的WebFiltering组列表”);
}
objSession.close();
返回结果;
我尝试分页按1.000组检索的结果,当我插入多达89.999条记录时,使用此方法,列表就可以了。但是,当我超过90.000时,我会得到相同的例外


你知道如何面对这个问题吗?

如果你处理如此大量的数据,我建议你使用批处理
可滚动结果


在这种情况下,会话不会将所有90000条记录都保存在内存中。

如果您处理如此大量的数据,我建议您使用批处理
ScrollableResults

在这种情况下,会话不会在内存中保留所有90000条记录。

“com.sun.jdi.ObjectCollectedException”发生在您引用的对象被垃圾收集时

java arrayList上没有这样的大小限制。

“com.sun.jdi.ObjectCollectedException”发生在您引用的对象被垃圾收集时


java arrayList上没有这样的大小限制。

能否附加完整的堆栈跟踪?这可能不是ArrayList的问题,而是ObjectSessionFactory的问题。您使用哪个库执行SQL查询?由于您的对象被垃圾收集,因此引发此异常。你能附上完整的堆栈跟踪吗?这可能不是ArrayList的问题,而是ObjectSessionFactory的问题。您使用哪个库执行SQL查询?由于您的对象被垃圾收集,因此引发此异常。
Session session = factory.openSession();
Transaction tx = null;
try {
    tx = session.beginTransaction();

    ScrollableResults dataCursor = session.createQuery("FROM Data").scroll();

    int count = 1;
    while (dataCursor.next()) {
        Data data = (Data) dataCursor.get(0);
        String newText = Utilities.generatedRandomString();
        data.setText(newText);
        session.update(data);

        if (count % 50 == 0) {
            System.out.println("============================log: count = " + count);
            session.flush();
            session.clear();
        }
        count++;
    }

    tx.commit();
} catch (Exception e) {
    if (null != tx) {
        tx.rollback();
    }
} finally {
    session.close();
}