[英]Hibernate - get ScrollableResults from DAO in Service Layer
在某些情況下,我需要讀取數據庫表的所有行以進行批處理。 為了與數據庫通信,我使用了DAO。 因此,在服務層上,我可以執行dao.getAll()
。 為此,我需要從dao返回數據庫的每一行。 如果出現“內存不足錯誤”,我不能返回包含所有實體的List
,因為表很大。 分頁不是一個好的解決方案,因為它會導致多個數據庫調用。 因此,有一個名為ScrollableResults
的東西,它使我可以滾動瀏覽所有實體並處理每一行而不會占用大量內存。 由於我使用的是DAO,因此必須將DAO中的每一行返回到服務層。 我該如何實現? 還有其他解決方案可以解決此問題嗎? 我將Hibernate與嵌入式Derby數據庫一起使用。
這也可以使用查詢界面和條件來完成。
Query query = session.createQuery(query);
query.setReadOnly(true);
query.setFetchSize(Integer.MIN_VALUE);
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
// iterate over results
while (results.next()) {
Object row = results.get();
// process row then release reference
// you may need to evict() as well
}
results.close();
這里的Hibernate仍然會在Session中緩存結果,因此您需要經常調用session.evict()或session.clear()。
當不需要緩存時,最好使用StatelessSession。
ScrollableResults results = session.createQuery(query) .setReadOnly(true).setFetchSize( 1000 ).setCacheable(false).scroll(ScrollMode.FORWARD_ONLY)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.