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中使用延迟加载进行一对一映射?
答案 0 :(得分:0)
有几种方法可以在Hibernate中实现one-to-one
关联,您可以将其映射为many-to-one
(对于双方)。这将允许您启用延迟加载,并且是将外键存储为要关联的表中的字段时的方法。
原因很简单:你不关心协会的目标方面是什么,所以你可以把它当作一对一的关联来对待而没有很多部分。您只需要表达“此实体具有一个属性,该属性是对另一个实体的实例的引用”,并使用外键字段来表示该关系。
另见: