延迟获取不适用于EclipseLink中的OneToOne关系

时间:2018-12-12 08:59:38

标签: java jpa eclipselink

在我的项目中,我使用 EclipseLink 作为JPA实现。我有两个实体,Product和ProductDetail:

  • 他们具有一对一的关系。一种产品应该只有一个ProductDetail。
  • ProductDetail不能为空。一种产品应始终具有ProductDetail。
  • 该关系是单向的。我只会从产品访问ProductDetail。
  • 两个实体应具有共享的主键,一个产品的“ id”应等于该ProductDetail的“ prodId”。

所以我设计了如下的实体模型:

var table = $('#example').DataTable({
  columnDefs: [
    { targets: 0, type: 'empty-on-top' }
  ]
}) 

@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;
}

但是懒惰的获取从未成功。始终随产品一起获取ProductDetail。我检查了许多文档,但仍然无法弄清楚。有人对此有经验吗?非常感谢!

注意:我使用的是EclipseLink,但没有使用Hibernate。

1 个答案:

答案 0 :(得分:3)

要使toOne关系的延迟加载有效,EclipseLink必须将一个代理注入引用中。此过程称为“编织”。

默认情况下未启用此功能,因此您必须查看文档以了解如何为运行时环境启用编织:

https://www.eclipse.org/eclipselink/documentation/2.7/solutions/testingjpa004.htm#CHDEECDB