您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Hibernate正在执行多个选择请求,而不是一个(使用连接获取)

Hibernate正在执行多个选择请求,而不是一个(使用连接获取)

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

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

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

其他 2022/1/1 18:35:49 有602人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶