2014-04-24 54 views
0

例如,我有以下實體:如何防止Hibernate加載整個集合?

class User{ 
    ... 
    private Set questions; 
    ... 
} 

當我工作的域模型:

user.questions.add(...); 

Hibernate將加載這個集合中的所有問題,即使我的收藏設爲LAZY 。我怎樣才能改變這種行爲?

回答

-1

如果結果大小是通過設置最大限制

query.setMaxResults(int maxResults) 
+0

這不是限制'xxx-to-xxx'-mapped集合中結果數量的方法。這是限制通過查詢獲取的實體數量的方法。 –

0

非常巨大的,你可以分批做到這一點你必須與

@LazyCollection(LazyCollectionOption.EXTRA) 
0

TL註釋集合; DR

不要這樣做,根據請求加載所有的集合。

詳細

我想你應該重新考慮你的願望,以避免加載集合時,它的元素,通過add()方法調用更新。以下是我的論點:

  • 當您添加元素時,結果(即是否添加元素)可能取決於集合的類型。對於Set - 它定義取決於收集內容。

  • 在業務邏輯方面,您的Set代表了與用戶相關的一些問題。讓我們想象你取得了你想要的結果 - 前五個問題在收集中,其餘十個不是。那麼這個系列的商業含義是什麼?聽起來真的有問題。

如果您認爲我的論點不好,請隨意使用其他答案中描述的技術。

1

所以實際的問題描述:當我應用級聯時存在性能問題,因爲可能有很多問題。

我的答案是:然後不要使用級聯來保存問題,請使用常規的EntityManager.persist()調用來持久保留問題。

很明顯吧?