由于结果集很大,我正在使用以下代码从数据库获取结果。
这是正确的做法吗? 我遇到了内存不足异常,我怀疑是因为这个。
// 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
。
最佳答案
您的代码看起来很奇怪 - 对结果进行分页的正确方法是这样的:
bigQ.setFirstResult(i * div);
bigQ.setMaxResults(div);
还要确保您的 session 缓存不会增长 - 如果您的查询仅返回标量值(而不是实体),那么这应该不是问题,但如果您在 //其余操作中加载一些实体
,可以。
关于java - Hibernate - Java分页 - 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512690/