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

标签 java jpa eclipselink

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

相关文章:

java - 将 Dataset<T> 传递给基于 MapFunction 接口(interface)的类 Java Spark 时为 null

java - 使用Java访问类路径中特定文件夹中的文件

java - 如何在 Android 中为图像设置边框?

jpa - 如何在 JPA 实体中禁用自动 Bean 验证

java - Eclipselink:使用级联 DELETE 删除嵌入的 @OneToOne

java - EclipseLink - 带条件查询的子查询 (JPA)

java - Struts 1.2.9 Action 链接

java - EJB 无法更新数据模型

java - 如何使用 JPA 实现时态表?

java - 具有大量列的 MySQL JPA 查询运行速度比预期慢得多