【问题标题】:Disable Lazy Loading in Hibernate在 Hibernate 中禁用延迟加载
【发布时间】:2011-07-25 15:33:42
【问题描述】:

如何在 Hibernate 中禁用延迟加载?我使用的是持久性注释,而不是 hbm xml 文件。

我正在按 ID 获取单个对象并希望加载所有属性。会话在我使用对象之前关闭。

谢谢!

【问题讨论】:

  • 我对这个问题的补充:如何禁用延迟加载,而不是代理,而是出现空集合?

标签: hibernate persistence lazy-evaluation hibernate-annotations


【解决方案1】:

您需要使用 FetchType.EAGER 注释要非延迟加载的属性

   @ManyToOne(fetch = FetchType.EAGER)

你看,延迟加载的不是你正在加载的对象。相反,该对象的关联是惰性的,如果这是您想要的行为,您需要告诉它们不要这样做。

如果这些对象还具有您希望立即加载的关联,您也需要对它们进行注释。

【讨论】:

    【解决方案2】:

    您可以在所有关联上递归地指定fetch = FetchType.EAGER,但这会加载一大堆您可能不感兴趣的数据。

    这通常是一个更好的解决方案,至少让所有 OneToMany 和 ManyToMany 关联到 LAZY(这是默认设置),并在您的用例需要它们(甚至使用临时加载它们)之前在关闭会话之前初始化它们询问)。

    OneToOne 和 ManyToOne 关联默认是 EAGER,这已经经常产生太多的请求。我通常更喜欢将所有内容标记为惰性,除非所有用例都需要获取关联。

    【讨论】:

      【解决方案3】:

      使用 fetch = FetchType.EAGER 来处理您希望懒惰关闭的所有集合和实体。

      还请查看: http://techblog.bozho.net/?p=645

      【讨论】:

        【解决方案4】:

        在 oneToMany 注释中写入fetch = FetchType.EAGER

        像这样: @OneToMany(fetch = FetchType.EAGER)

        注意:如果你的数据库很大,关系很多,会大大增加你的数据库进程;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-25
          • 2018-11-22
          • 1970-01-01
          • 1970-01-01
          • 2011-10-16
          相关资源
          最近更新 更多