Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hibernate支持一对一关联的延迟加载吗?_Hibernate_Persistence_Lazy Loading - Fatal编程技术网

hibernate支持一对一关联的延迟加载吗?

hibernate支持一对一关联的延迟加载吗?,hibernate,persistence,lazy-loading,Hibernate,Persistence,Lazy Loading,Hibernate默认支持一对多/多对一和多对多关联的延迟加载。 但是Hibernate不支持一对一关系的延迟加载。让我们为家长和孩子举以下例子 情景 一个人有一个地址父实体定义为 @Entity @Table(name = “Person”) public class Person { ... private Address address; @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY) @Join Column(nam

Hibernate默认支持一对多/多对一和多对多关联的延迟加载。 但是Hibernate不支持一对一关系的延迟加载。让我们为家长和孩子举以下例子 情景

一个人有一个地址父实体定义为

@Entity
@Table(name = “Person”)
public class Person {

...

private Address address;

@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@Join Column(name="PERSON_ID", insert able=false, null able=false)
public Address get Address() {
return address;

...

}
子实体定义为

@Entity
@Table(name = “Address”)
public class Address {

...

private Person person;

@OneToOne(mapped By="person")
public Person get Person() {
return person;

...

}
在上面的场景中,它应该是延迟加载,但实际上hibernate正在生成渴望加载。 两个select语句同时激发 1) 在这种情况下,为父实体选择Person 2) 在本例中选择子实体的地址


那么,如何在hibernate中为一对一映射使用延迟加载呢?

在hibernate中有几种方法可以实现一对一关联,您可以将其映射为多对一(对于双方)。这将允许您启用延迟加载,并且是将外键存储为要关联的表中的字段时的方法

原因很简单:你不在乎关联的目标端是什么,所以你可以像对待一对一的关联一样对待它,而不用考虑多个部分。您只需要表示“此实体具有一个属性,该属性是对另一实体实例的引用”,并使用外键字段来表示该关系

另见: