2010-04-08 100 views
2

,而不是調用PersonDao.getAll()當我們希望不要在內存標識的整個集合返回ID的List<Long>有ID的巨大集合。避免調用DAO.getAll()

好像返回org.springframework.jdbc.support.rowset.SqlRowSet並迭代此行集不會保存內存中的每個對象。

這裏唯一的問題是我無法將此行轉換爲我的實體。

有沒有更好的方法呢?

一般我們想做的事情上的每個人的方法在我們的數據庫

回答

1

你可以使用在結果集中進行迭代,並定期清除會話處置不需要的對象。來自Hibernate書籍的示例:

ScrollableResults itemCursor = session.createQuery("from Item").scroll(); 
int count=0; 

while (itemCursor.next()) { 
    Item item = (Item) itemCursor.get(0); 
    modifyItem(item); 
    if (++count % 100 == 0) { 
    session.flush(); 
    session.clear(); 
    } 
} 

有關更多示例和詳細信息,請參閱the Hibernate reference

+0

很好的答案!除了沖洗和清理我害怕。我是否也希望這也適用於其他正在運行的交易... StatelessSession最適合我。 – 2010-04-08 12:17:11

+0

@Michael好的一點,我忘了提及這應該是在一個單獨的事務中執行,而不是搞砸持久性上下文。但是無狀態會話也可以工作。 – 2010-04-08 12:57:07

+0

éter:好的,但是當它在sperate事務中運行時,我認爲session.flush/clear仍然會影響本次會話中的所有事務。 – 2010-04-09 07:14:00