【发布时间】:2018-01-09 23:40:33
【问题描述】:
像 Hibernate 这样的一些 JPA 提供程序使用代理来处理延迟初始化。考虑以下示例:
@Entity
public class Person {
@Id
private Long id;
@ManyToOne(fetch=FetchType.LAZY)
private House house;
}
@Entity
public class House {
@Id
private Long id;
@Embedded
private Address address;
}
当获取一个 Person 实体时,它的 house 属性被设置为一个 Proxy(惰性)。
Person person = em.find(Person.class, 1);
House house = person.getHouse(); // Proxy
if (house == null)
System.out.println("has no house);
else
System.out.println("has a house");
如果人没有房子,人对象有房子的代理(不为空)。上面的代码会打印错误信息。这是 JPA 代理的问题吗?
【问题讨论】:
-
如果 JPA 提供程序是从该操作返回代理的类型,则它是一个问题。另一方面,如果 JPA 提供程序不返回代理(例如 DataNucleus),那么这不是问题。
标签: jpa proxy lazy-initialization