【发布时间】:2011-10-26 15:21:46
【问题描述】:
我正在使用 Hibernate 的命名查询来执行一个存储过程,返回一个非常大的数据集(超过 200 万行)数据库是 Oracle 11g
例如:
Query query = session.getNamedQuery(procName);
我从休眠文档中知道,您不能使用 setFirstResult/setMaxResult,如上所述 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html.
一切都很好,在一个较小的数据集上,比如 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 中的存储过程来管理大型数据集检索。
万分感谢
【问题讨论】:
-
为什么要返回 200 万行?建议您批量处理。
标签: hibernate stored-procedures large-data