hibernate支持一对一关联的延迟加载吗?
Hibernate默认支持一对多/多对一和多对多关联的延迟加载。 但是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
@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中有几种方法可以实现一对一关联,您可以将其映射为多对一(对于双方)。这将允许您启用延迟加载,并且是将外键存储为要关联的表中的字段时的方法 原因很简单:你不在乎关联的目标端是什么,所以你可以像对待一对一的关联一样对待它,而不用考虑多个部分。您只需要表示“此实体具有一个属性,该属性是对另一实体实例的引用”,并使用外键字段来表示该关系 另见: