延迟加载不适用于Hibernate中的一对一映射

时间:2014-11-10 10:17:04

标签: java hibernate lazy-loading one-to-many one-to-one

我引用此链接https://developer.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-to-one来了解为什么延迟加载不适用于one to one,但适用于one to many

我不明白为什么SET对象永远不会出现如上所述的一对多的情况。有人可以解释一下吗?

我仍然不明白为什么延迟加载在one to many中有效但在one to one关联中无效。请解释。

3 个答案:

答案 0 :(得分:0)

说实话,我直到现在才知道这一点,但这就是我理解那篇文章的原因。

对于@OneToMany,Hibernate为集合创建了一个包装器,该包装器永远不会为null。所以,如果另一方没有数据,那么它只是一个空集,但仍然不是空的。

但是对于@OneToOne包装器(代理)不能使用,因为getCee()(来自那篇文章的例子)永远不会返回null,这是不对的。此属性的null表示目标表中没有匹配的行,not null表示存在。考虑到这一点,只有在关系是强制性的(constrained=true)时,包装才有意义。

答案 1 :(得分:0)

这里重要的一点是,在实现一对多关系时,关系表示为一个Set,它是Hibernate为其提供实现的接口,而这个实现是实现延迟加载的实现。 / p>

但是,在一对一映射的情况下,Hibernate在任何时候都没有为主类与其一对一关系的任意类实现派生类。

答案 2 :(得分:-1)

一对一关系的默认提取类型是Eager,因此要更改此设置,您必须将字段注释为

@OneToOne(fetch=FetchType.LAZY)