我正在使用 Hibernate 的命名查询来执行一个存储过程,返回一个非常大的数据集(超过 200 万行)数据库是 Oracle 11g
例如:
Query query = session.getNamedQuery(procName);
我从休眠文档中知道,您不能使用 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html中所述的 setFirstResult/setMaxResult 。
一切都很好,在像 100,000 行这样的较小数据集上。但是,一旦我使用 1,000,000 进行测试,我就会收到 OutOfMemory 错误。
从查询对象中,我得到一个 listIterator。我假设数据只被提取一次,我遍历 listiterator ( query.list().listIterator()
)
我没有配置二级缓存。在处理 Oracle 存储过程时,这些设置是否有帮助。
query.setCacheMode(org.hibernate.CacheMode.IGNORE);
query.setFetchSize(1000);
query.scroll(org.hibernate.ScrollMode.FORWARD_ONLY);
基本上,我如何使用 Hibernate 中的存储过程来管理大型数据集检索。
百万谢谢