首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java列表不能检索超过90.000个元素

Java列表不能检索超过90.000个元素
EN

Stack Overflow用户
提问于 2018-08-10 01:05:26
回答 2查看 238关注 0票数 0

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

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

代码语言:javascript
复制
com.sun.jdi.ObjectCollectedException occurred while retrieving value.

我使用的代码如下所示:

代码语言:javascript
复制
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;

我尝试对每组1.000条检索到的结果进行分页,当我插入多达89.999条记录时,使用这种方法,列表就没问题了。但是,当我超过90.000时,我会得到同样的异常。

有没有关于如何面对这个问题的想法?

EN

回答 2

Stack Overflow用户

发布于 2018-08-10 01:29:03

如果您要处理如此大量的数据,我建议您对ScrollableResultshttps://grokonez.com/hibernate/resolve-hibernate-outofmemoryerror-problem-hibernate-batch-processing使用批处理

代码语言:javascript
复制
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();
}

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

票数 2
EN

Stack Overflow用户

发布于 2018-08-10 01:41:11

当你引用的对象被垃圾回收时,"com.sun.jdi.ObjectCollectedException“就会发生。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51772505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档