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

时间:2013-12-04 10:49:54

标签: 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(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中使用延迟加载进行一对一映射?

1 个答案:

答案 0 :(得分:0)

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

  

原因很简单:你不关心协会的目标方面是什么,所以你可以把它当作一对一的关联来对待而没有很多部分。您只需要表达“此实体具有一个属性,该属性是对另一个实体的实例的引用”,并使用外键字段来表示该关系。

另见: