Hibernate正在执行多个选择请求,而不是一个(使用join fetch)

Hibernate正在执行多个选择请求,而不是一个(使用join fetch),第1张

Hibernate正在执行多个选择请求,而不是一个(使用join fetch)

您遇到了一个众所周知的问题,也就是“ N + 1选择”。简而言之,当您选择父实体时,会发生“ N +
1选择”问题,并且hibernate将使用OneToOne对与父相关的子项进行附加选择。因此,如果您的数据库中有“
N”个父子记录,则hibernate将使所有父项具有一个选择,然后使每个子项处于单独的选择中,从而使N + 1个选择合计。
在hibernate状态下,有两种方法可以解决“ N + 1”问题:
1.“加入获取” 所有 OneToOne子级。
2.启用二级缓存,并在OneToOne子级上使用@Cache批注。

您的问题是您没有“加入”所有的OneToOne孩子。您必须“加入”所有对象,包括可传递的子代(从子代本身或集合中引用的实体)。

使OneToOne变得懒惰(因为默认情况下它很渴望)只是部分解决方案,因为仅当您访问子代上的某个getter时,hibernate才会为子代选择一个选项,但是从长远来看,它仍将使所有N个选择成为可能。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5124965.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存