我使用下面的一段代码来从数据库中获取结果,因为结果集很大。休眠 - Java分页 - 内存不足异常
这是正确的做法吗? 我正在运行内存异常,我怀疑这是因为这个。
// div is set to 10,000
// i have calculated how many times i need do it using a count query
// and that value is being used in iteration variable
Query bigQ=session.createSQLQuery(bigQuery);
for(int i=0;i<iteration;i++)
{
bigQ.setFetchSize(div);
bigQ.setMaxResults(i*div);
List<Object[]> result=bigQ.list();
// now i am using the result to get the values
for(Object[] a:result)
{
// rest of operations
}
}
注:
- 我在
jboss run.conf
设置足够-Xms和-Xmx。 - 我不能使用可滚动设置,因为postgre驱动程序不支持它。
- 我不能使用
createQuery
,因为在这种情况下,hibernate正在生成很多查询,所以我使用了一个大连接查询以及createSQLQuery
。
谢谢你的回复..如何确保会话缓存不会增长? – lam 2011-04-07 05:38:33
再次感谢您提供清除会话缓存的提示。使用session.evict()后,我能够从内存不足错误中恢复 – lam 2011-04-08 05:31:44