如果为FetchType.LAZY
注释设置了@ManyToOne
属性-
//use case 1
@ManyToOne(fetch = FetchType.LAZY)
@LazyToOne
注释是否需要与@ManyToOne
一起使用? -
//use case 2
@ManyToOne
@LazyToOne(LazyToOneOption.PROXY)
或者用例1和2彼此等效?
答案 0 :(得分:0)
对于多对一映射,是的,这两种情况是等效的
就像一对多的情况一样,最初会创建空收集代理,并根据需要填充空收集代理,因此关联可能是惰性的。
但是,一对一映射并非如此。 您将需要使用
@OneToOne(optional = false, fetch = FetchType.LAZY)
等效版本
这样做的原因是,映射的实体必须知道关联属性应包含代理对象还是NULL,并且由于通常是通过共享PK进行一对一映射,因此无法通过查看其基表的列来确定该属性。 ,因此无论如何都要急切地获取它,以使代理毫无意义
有关Here的详细信息,请参见延迟加载如何用于一对一和多对一映射。