您遇到了一个众所周知的问题,也就是“ N + 1选择”。简而言之,当您选择父实体时,会发生“ N +
1选择”问题,并且hibernate将使用OneToOne对与父相关的子项进行附加选择。因此,如果您的数据库中有“
N”个父子记录,则hibernate将使所有父项具有一个选择,然后使每个子项处于单独的选择中,从而使N + 1个选择合计。
在hibernate状态下,有两种方法可以解决“ N + 1”问题:
1.“加入获取” 所有 OneToOne子级。
2.启用二级缓存,并在OneToOne子级上使用@Cache批注。
您的问题是您没有“加入”所有的OneToOne孩子。您必须“加入”所有对象,包括可传递的子代(从子代本身或集合中引用的实体)。
使OneToOne变得懒惰(因为默认情况下它很渴望)只是部分解决方案,因为仅当您访问子代上的某个getter时,hibernate才会为子代选择一个选项,但是从长远来看,它仍将使所有N个选择成为可能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)