获取@ManyToOne和@LazyToOne的类型用例

时间:2019-01-03 05:01:51

标签: spring hibernate jpa

如果为FetchType.LAZY注释设置了@ManyToOne属性-

//use case 1
@ManyToOne(fetch = FetchType.LAZY)  

@LazyToOne注释是否需要与@ManyToOne一起使用? -

//use case 2
@ManyToOne
@LazyToOne(LazyToOneOption.PROXY)

或者用例1和2彼此等效?

1 个答案:

答案 0 :(得分:0)

对于多对一映射,是的,这两种情况是等效的

就像一对多的情况一样,最初会创建空收集代理,并根据需要填充空收集代理,因此关联可能是惰性的。

但是,一对一映射并非如此。 您将需要使用

@OneToOne(optional = false, fetch = FetchType.LAZY)

等效版本

这样做的原因是,映射的实体必须知道关联属性应包含代理对象还是NULL,并且由于通常是通过共享PK进行一对一映射,因此无法通过查看其基表的列来确定该属性。 ,因此无论如何都要急切地获取它,以使代理毫无意义

有关Here的详细信息,请参见延迟加载如何用于一对一和多对一映射。