簡體   English   中英

Hibernate-從服務層中的DAO獲取ScrollableResults

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM