Java列表无法检索超过90.000个元素
当我试图从数据库中检索大量记录时,我正在处理一个问题。似乎当记录量超过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
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();
}