在我的项目中,我使用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/

10-10 19:36