例如,我有以下實體:如何防止Hibernate加載整個集合?
class User{
...
private Set questions;
...
}
當我工作的域模型:
user.questions.add(...);
Hibernate
將加載這個集合中的所有問題,即使我的收藏設爲LAZY
。我怎樣才能改變這種行爲?
例如,我有以下實體:如何防止Hibernate加載整個集合?
class User{
...
private Set questions;
...
}
當我工作的域模型:
user.questions.add(...);
Hibernate
將加載這個集合中的所有問題,即使我的收藏設爲LAZY
。我怎樣才能改變這種行爲?
如果結果大小是通過設置最大限制
query.setMaxResults(int maxResults)
非常巨大的,你可以分批做到這一點你必須與
@LazyCollection(LazyCollectionOption.EXTRA)
TL註釋集合; DR
不要這樣做,根據請求加載所有的集合。
詳細
我想你應該重新考慮你的願望,以避免加載集合時,它的元素,通過add()
方法調用更新。以下是我的論點:
當您添加元素時,結果(即是否添加元素)可能取決於集合的類型。對於Set
- 它定義取決於收集內容。
在業務邏輯方面,您的Set
代表了與用戶相關的一些問題。讓我們想象你取得了你想要的結果 - 前五個問題在收集中,其餘十個不是。那麼這個系列的商業含義是什麼?聽起來真的有問題。
如果您認爲我的論點不好,請隨意使用其他答案中描述的技術。
所以實際的問題描述:當我應用級聯時存在性能問題,因爲可能有很多問題。
我的答案是:然後不要使用級聯來保存問題,請使用常規的EntityManager.persist()調用來持久保留問題。
很明顯吧?
這不是限制'xxx-to-xxx'-mapped集合中結果數量的方法。這是限制通過查詢獲取的實體數量的方法。 –