例如,我有以下实体:
class User{
...
private Set questions;
...
}
当我操作域模型时:
user.questions.add(...);
即使我将集合设置为Hibernate
, LAZY
也会加载此集合的所有问题。我该如何改变这种行为?
答案 0 :(得分:1)
所以实际的问题描述:当我应用级联时会出现性能问题,因为可能存在很多问题。
我的回答是:然后不要使用级联来保存问题,使用常规的EntityManager.persist()调用来保留问题。
非常明显,对吧?
答案 1 :(得分:0)
您必须使用
注释该集合@LazyCollection(LazyCollectionOption.EXTRA)
答案 2 :(得分:0)
<强> TL; DR 强>
不要这样做,请根据要求加载所有集合。
<强>详情
我认为您应该重新考虑在通过add()
方法调用更新其元素时避免加载集合的愿望。以下是我的论点:
添加元素时,结果(即是否添加元素)可能取决于集合的类型。对于Set
- 它定义取决于收集内容。
就业务逻辑而言,您的Set
代表了一些与用户相关的问题。让我们假设你达到了你想要的结果 - 前五个问题在集合中,其余十个不在。那么该系列的商业含义是什么?听起来真的很可疑。
如果你认为我的论点不好,请随意使用其他答案中描述的技巧。
答案 3 :(得分:-1)
如果resultSet大小非常大,您可以通过设置最大限制
批量执行此操作query.setMaxResults(int maxResults)