禁用Hibernate延迟获取多对一关联

时间:2011-09-28 14:10:51

标签: hibernate lazy-loading lazy-initialization

我看到的许多先前问题的主题 - 但不完全是这个问题。我理解Hibernates懒惰的抓取策略,开放式会话等等,但我似乎无法找到这个简单的小东西的解决方案,无论如何我的关联都是懒散的。

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

假设我们有一系列参考文献,例如 a< -b< -c< -d - > ë
通常,提取 a 也意味着我们需要 b,c d 。所以这些设置总是急切地获取(通过在hibernate映射文件中指定lazy=false)。这个工作!!

然而,我们现在还需要始终急切地获取关联 e ,每次获取时都是如此。由于 e 对于 d 执行某些逻辑操作至关重要。

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

我认为这会起作用是不对的?使用hibernate v.3.2.6和Spring版本2.5.6在hbm文件中指定了lazy属性。

希望有人可以为我澄清事情......

无论如何,如果找到,请参阅另一篇文章。我似乎无法找到一个覆盖这个......

1 个答案:

答案 0 :(得分:3)

多对一关联的延迟属性在类元素中设置:

<class name="E" laze="false">
...
</class>

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

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