hibernate/jpa double OneToOne 与一个实体的双向关系

Posted

技术标签:

【中文标题】hibernate/jpa double OneToOne 与一个实体的双向关系【英文标题】:hibernate/jpa double OneToOne Bidirectional Relationship to one entity 【发布时间】:2019-04-23 07:15:35 【问题描述】:

我有以下结构,我不知道如何放入正确的休眠映射。

public class Company
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "details_x")
    private Details detailsX;

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "details_y")
    private Details detailsY;

public class Details
    ....
    private Type type; //Enum that could be x or y

    @OneToOne
    private Company company;

公司有 x 的详细信息和 y 的详细信息。一个详细信息只能由一个公司在 x 或 y 中使用。 数据库方面,我认为最好的设置是在 tbl_company 上有 2 列引用详细信息的 Pk。 但这会导致 Details 与 Company 的关系不起作用。

任何人对如何最好地映射这个有任何建议吗?

编辑:向详细信息添加类型

【问题讨论】:

【参考方案1】:

您必须定义mappedBy 属性,这将表明我不是下面的所有者。

public class Details
    @OneToOne(mappedBy = "detailsX", cascade = CascadeType.ALL, 
                  fetch = FetchType.LAZY, optional = false)
    private Company company;

【讨论】:

这仅适用于 detailsX 不适用于 detailsY,我遇到的问题是其中之一

以上是关于hibernate/jpa double OneToOne 与一个实体的双向关系的主要内容,如果未能解决你的问题,请参考以下文章

Spring Hibernate JPA 联表查询

Spring Hibernate JPA 联表查询 复杂查询

Hibernate JPA 的异常

直接加入 JPA 或 HIBERNATE

Hibernate + JPA:模式验证:缺少列

Spring Hibernate JPA 联表查询 复杂查询