在我的项目中,我使用EclipseLink作为JPA实现。我有两个实体,Product和ProductDetail:
他们有一对一的关系。一个产品应该只有一个ProductDetail。
ProductDetail不能为null。一种产品应始终具有ProductDetail。
该关系是单向的。我将仅从产品访问ProductDetail。
这两个实体应具有共享的主键,产品的“ id”应等于ProductDetail的“ 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。我检查了许多文档,但仍然无法弄清楚。有人对此有经验吗?非常感谢!
注意:我正在使用EclipseLink,但没有使用Hibernate。
最佳答案
为了使toOne关系的延迟加载工作,EclipseLink必须将代理注入参考中。该过程称为“编织”。
默认情况下未启用此功能,因此您必须查看文档以如何为运行时环境启用编织:
https://www.eclipse.org/eclipselink/documentation/2.7/solutions/testingjpa004.htm#CHDEECDB
关于java - 延迟获取不适用于EclipseLink中的OneToOne关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53739330/