JPA:将 OneToOne Long 值(不是实体)映射到另一个不是主键的表列

Posted

技术标签:

【中文标题】JPA:将 OneToOne Long 值(不是实体)映射到另一个不是主键的表列【英文标题】:JPA : Mapping a OneToOne Long value (not an entity) to another tables column which is not a primary key 【发布时间】:2019-06-07 08:37:09 【问题描述】:

所以我有一个实体,它与表中的现有数据库具有一对一的关系。但是,我希望它映射到的字段不是主键。 我怎样才能做到这一点?我要在下面添加什么?

@Entity
public class MyEntity 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToOne
    private Long otherTableField;

【问题讨论】:

如果加入列值 = PK of myEntity 那么你可以试试@SecondaryTable 【参考方案1】:

您需要用referencedColumnName 明确指定@JoinColumn

@OneToOne
@JoinColumn(name = "other_table_non_primary_id", referencedColumnName= "non_primary_id"
private OtherTable otherTableField;

此外,类型必须是 OtherTable 而不是 Long。

【讨论】:

我试图避免映射出数据库中已经存在的另一个表。不能只将 Id 映射为 Long 吗? 这不是 JPA 的工作方式。您可以使用 long 但它只是一个@Basic 列

以上是关于JPA:将 OneToOne Long 值(不是实体)映射到另一个不是主键的表列的主要内容,如果未能解决你的问题,请参考以下文章

将 OneToOne/ManyToOne 与 JPA 和多个数据源一起使用时出错

如何处理 JPA @OneToOne 映射中的“孤立”行

JPA OneToOne,外键在 Spring Boot 上为空

JPA 孤儿删除不适用于 OneToOne 关系

Spring boot JPA OneToOne 配置问题

Spring Data+JPA:对 OneToOne 关系强制执行内部联接