我使用Hibernate的命名查詢來執行存儲過程返回一個非常大的數據集(超過200萬行)DB是的Oracle 11gHibernate的存儲過程調用導致內存不足
例如: Query query = session.getNamedQuery(procName);
我從hibernate文檔中得知,不能像 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querysql.html中所述的那樣使用setFirstResult/setMaxResult。
一切都很好,在一個像100,000行的小數據集上。但是,只要我測試了1,000,000,就會發生OutOfMemory錯誤。
從查詢對象中,我得到一個listIterator。我假設數據只被提取一次,我迭代列表器(query.list().listIterator()
)
我沒有配置二級緩存。 在處理Oracle存儲過程時,這些設置是否會有所幫助?
query.setCacheMode(org.hibernate.CacheMode.IGNORE); query.setFetchSize(1000);
query.scroll(org.hibernate.ScrollMode.FORWARD_ONLY);
基本上,我如何管理使用存儲的特效在Hibernate中的大數據集檢索。
萬分感謝
你爲什麼試圖返回200萬行?建議你分批處理。 –