【问题标题】:Disable Hibernate lazy fetching many-to-one associations禁用 Hibernate 延迟获取多对一关联
【发布时间】:2011-09-28 14:10:51
【问题描述】:

我看到的许多先前问题的主题 - 但不完全是这个问题。我了解 Hibernates 延迟获取策略、open-session-in-view 等,但我似乎无法找到解决这个简单的小问题的解决方案,无论如何我的关联都是延迟获取的。

我没有在视图中使用开放会话,因为我的网络应用是在没有它的情况下构建的,现在“迁移”起来很复杂......

假设我们有一个引用链,比如 a e
通常,获取 a 也意味着我们需要 b、cd。所以这些被设置为总是急切地获取(通过在休眠映射文件中指定lazy=false)。这工作!

但是,我们现在还需要总是急切地获取关联 e,每次获取 d 时。因为 e 对于在 d 上执行一些逻辑操作至关重要。

这就是它停止工作的地方... ed 相关联,作为 d 上的多对一关联。将其设置为 lazy=false 并不能解决问题,它仍未正确初始化,并且从 d 访问 e 上的属性会导致 LazyInitialisationException。

期望这会奏效是不是我错了?使用 hibernate v. 3.2.6 和 Spring 版本 2.5.6 在 hbm 文件中指定惰性属性。

希望有人能帮我澄清一下……

无论如何,如果您找到另一篇文章,请参阅另一篇文章。我似乎找不到涵盖此内容的内容...

【问题讨论】:

    标签: hibernate lazy-loading lazy-initialization


    【解决方案1】:

    在class元素中设置多对一关联的lazy属性:

    <class name="E" laze="false">
    ...
    </class>
    
    <class name="D">
      <many-to-one name="e" .../>
    </class>
    

    多对一的惰性属性与任何属性的含义相同:它允许lazy loading of single properties,仅当所有者本身是代理时才有效。在您的情况下,这不是您可以使用的任何东西,并且默认情况下它被设置为 false。

    【讨论】:

    • 看,现在我错过了!但是,引用实例不可能指定应该急切地获取所引用的关联?这是一个为所有人定义它的问题,还是根本没有?不过谢谢!它肯定有效:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2015-01-26
    • 2011-07-25
    相关资源
    最近更新 更多