我们的应用程序中的一个模型对象有许多字段配置为如此急切地获取:
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "field")
public Field getField() {
return this.field;
}
但是我有时候不需要这些信息,这会减慢我的查询。我无法改变行为并使用FetchType.LAZY
,因为我不知道会对整个应用程序产生什么影响(遗留...)。有没有办法简单告诉hibernate
什么都不提取,除了,如果在查询中指定了?
答案 0 :(得分:0)
上次我检查了hibernate没有提供适当的解决方案,所以我最终得到了这个解决方案:
LAZY
。boolean forceEager
forceEager=true
list.size()
的延迟引用列表将强制Hibernate加载完整列表,因此服务返回完全获取的对象。如果对象结构中有多个图层受到影响,则需要遍历整个层次结构并从上到下访问每个延迟加载的对象。
这是一个容易出错的解决方案,所以你需要小心处理它。
答案 1 :(得分:0)
如果可以切换到此查询的Criteria,则可以将FetchMode.SELECT用于字段属性
crit.setFetchMode("field", FetchMode.SELECT);