在我的项目中,我使用 EclipseLink 作为 JPA 实现。我有两个实体,产品和产品详细信息:
- 它们具有一对一的关系。一款产品只能有一个产品详细信息。
- ProductDetail 不能为空。一款产品应始终具有产品详细信息。
- 关系是单向的。我只会从产品访问产品详细信息。
- 两个实体应具有共享主键,产品的“id”应等于产品详细信息的“prodId”。
所以我设计了如下实体模型:
@Table(name="product")
public class Product{
@Id
@GeneratedValue(generator = "PRODUCT_ID")
@UuidGenerator(name = "PRODUCT_ID")
@Column(name = "id", unique=true, nullable=false, length=200)
private String id;
// Some other properties....
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
@PrimaryKeyJoinColumn
private ProductDetail productDetail;
}
<小时/>
@Table(name="product_detail")
public class ProductDetail{
@Id
@Column(name = "prod_id", unique=true, nullable=false, length=200)
private String prodId;
// Some other properties....
}
但是惰性获取从来没有起作用。 ProductDetail 始终与 Product 一起获取。我查了很多文档,但仍然无法弄清楚。有人对此有一些经验吗?非常感谢!
注意:我使用的是 EclipseLink,但没有使用 Hibernate。
最佳答案
为了使 toOne 关系上的延迟加载工作,EclipseLink 必须将代理注入(inject)到引用中。这个过程称为“编织”。
默认情况下未启用此功能,因此您必须查看文档如何为您的运行时环境启用编织:
https://www.eclipse.org/eclipselink/documentation/2.7/solutions/testingjpa004.htm#CHDEECDB
关于java - 延迟获取不适用于 EclipseLink 中的 OneToOne 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53739330/