【问题标题】:Avoid N+1 selects from Hibernate避免从 Hibernate 中选择 N+1
【发布时间】:2015-11-28 14:54:05
【问题描述】:

在我的项目中,我们有 hbm.xml 文件,它是 fetch="select" 用于所有关系表的一对多。

例如: 一所学校有很多教室,一个教室会有很多孩子

所以在我的 hbm 文件中

school.hbm.xml
lazy="false" fetch="select">

classroom.hbm.xml
lazy="false" fetch="select">

在某些情况下,我只想获取基于教室 div = 'A' 的学校列表。但是由于这种映射,hibernate 也在为课堂做选择,在这种情况下我不想要。

请帮助我如何避免在课堂上进行不必要的选择。有没有办法覆盖这个获取模式,只加入学校和教室,加入孩子

我尝试了多种选择,但没有运气。 非常感谢您的投入。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    不 - 我相信您不能覆盖 EAGER 映射,既不使用查找、查询也不使用条件查询。例如见StackOverflow thread。覆盖 LAZY 很容易。

    hbm.xml 文件是 fetch="select" 用于所有关系表的一对多

    ...似乎是一个糟糕的默认选择——这就是为什么相反的是 Hibernate 自己的默认选择。

    通常最好在映射中保持低调和懒惰,并在急切时使用查询。

    【讨论】:

    • 感谢您的回复。同意,但是我们有一种情况,我们需要急切地加载一些映射对象。现在我们无法更改该映射。
    猜你喜欢
    • 2012-05-19
    • 1970-01-01
    • 2011-12-07
    • 2011-07-12
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多