gpt4 book ai didi

java - hibernate : Force lazy-loadding on eager field

转载 作者:太空宇宙 更新时间:2023-11-04 13:10:59 25 4
gpt4 key购买 nike

我们的应用程序中的一个模型对象有许多字段配置为急切地获取,如下所示:

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "field")
public Field getField() {
return this.field;
}

但是有时我不需要这些信息,这会毫无意义地减慢我的查询速度。我无法更改行为并使用 FetchType.LAZY 代替,因为我不知道会对整个应用程序(旧版...)产生什么影响。有没有一种方法可以简单地告诉hibernate不获取任何内容,除非在查询中指定了它?

最佳答案

上次我检查hibernate没有提供适当的解决方案,所以我最终得到了这个解决方案:

  • 将有问题的引用配置为 LAZY
  • 所有受影响的服务方法(使用这些模型)都获得了带有 boolean forceEager 的重载版本
  • 默认情况下,所有现有函数均已重构,以使用 forceEager=true 调用新函数
  • 技巧来了:作为“强制急切获取”的一种手段,我发现没有什么比实际访问代理(延迟获取)对象更好的了。例如,如果延迟引用的列表执行 list.size() 将强制 Hibernate 加载完整列表,因此服务会返回完全获取的对象。

如果对象结构中不止一层受到影响,您需要遍历整个层次结构并从上到下访问每个延迟加载的对象。

这是一个容易出错的解决方案,因此您需要小心处理。

关于java - hibernate : Force lazy-loadding on eager field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33959677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com