繁体   English   中英

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

[英]Lazy loading not working with one to one mapping in Hibernate

我指的是此链接https://developer.jboss.org/wiki/SomeExplanationsOnLazyLoading one to one以了解为什么延迟加载不能one to one起作用,而是one to many起作用。

我不明白为什么上面链接中所说的SET对象在一对一的情况下永远不会为空,有人可以解释一下吗?

我仍然不明白为什么延迟加载在one to many关联中而不是在one to one关联中起作用,请解释。

老实说,直到现在我都还不知道,但这就是我对这篇文章的理解。

对于@OneToMany Hibernate为该集合创建一个包装器,并且该包装器永远不会为null。 因此,如果另一侧没有数据,它将只是一个空集,而仍然不为null。

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

这里的重点是,在实现一对多关系时,该关系表示为Set,这是Hibernate提供了实现的接口,而该实现就是实现延迟加载的方法。

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

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

@OneToOne(fetch=FetchType.LAZY)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM