如何在jpa中加入具有多个主键或特定主键的列

Posted

技术标签:

【中文标题】如何在jpa中加入具有多个主键或特定主键的列【英文标题】:How to join column with multiple primary keys or specific primary key in jpa 【发布时间】:2021-07-17 17:40:15 【问题描述】:
@Entity
@Table(name = "A")
public class A 
    @Id
    @Column(name = "id")
    private Long id;

    @Id
    @Column(name = "name")
    private String name;

    @JoinColumn(name = "test_id")
    private List<Test> testId;

@Entity
@Table(name = "Test")
public class Test 
    @Id
    @Column(name = "test_id")
    private Long testId;

错误结果是

" JPA 与 OneToOne 关系的问题:引用的外键列数错误。应该是 2"

如何指定连接测试表的主键?

表 A:列 ID 地图与 表 B:列 test_id

【问题讨论】:

【参考方案1】:

由于您的表 A 有一个复合键,您应该将列分开到另一个键类中,然后加入表键的各个部分。

例如,创建AKey

@Embeddable
public class AKey 

    @Column(name = "id")
    private Long id;

    @Column(name = "name")
    private String name;

    //getters and setters

然后替换A类中的id

@Entity
@Table(name = "A")
public class A 
    @EmbeddedId
    private AKey key;

    @JoinColumn(name = "test_id")
    private List<Test> testId;

然后您可以在 Test.testId = A.key.id 上进行连接

【讨论】:

以上是关于如何在jpa中加入具有多个主键或特定主键的列的主要内容,如果未能解决你的问题,请参考以下文章

如何从特定数据库中的所有表中检索不属于主键和外键的所有列

在已经存在主键或唯一键约束的列上创建索引

使用业务实体的自然ID作为主键

如何在没有主键的情况下从连接表中创建实体

在 spring jparepository 中加入多个表

具有唯一索引和主键的列给出唯一约束违规