如何使用复合键映射两个表,但只映射一个 pk

How to map the two tables using composite key but map just one pk

提问人:차재욱 提问时间:11/14/2023 最后编辑:차재욱 更新时间:11/15/2023 访问量:27

问:

在此处输入图像描述

公司表

  • varchar 代码 (PK)
  • varchar biznumber (PK)

合约表

  • varchar 代码 (PK)
  • varchar 模块 (PK)

这两个表仅映射列代码。

我可以使用 IdClass referencedColumn 解决这个问题,只需一列。

但是当我从 JDK 版本 17 降级到 11 时 这是行不通的。

我尝试将 IdClass 与复合键一起使用。当我映射这个实体时,我使用了关于列代码的 referencedcolumn。

不好意思。我看到了你的评论。所以我上传了我的代码。 因为这段代码与我的 Compant 项目有关。所以我担心上传代码。

所以我在组织后上传了我的代码谢谢。

公司简介PK.java

@NoArgsConstructor
@EqualsAndHashCode
@Getter
public class CompanyPK implements Serializable{

private String code;
private String biznumber;

@Builder
public CompanyPK(String code, String biznumber)
{
    this.code=code;
    this.biznumber=biznumber;
}

}

公司:.java

@Entity
@Getter
@IdClass(CompanyPK.class)
public class Company{

@Id
@Column(name="company_code")
private String code;
@Id
@Column(name="company_biznumber")
private String biznumber;

}

合约PK.java

@NoArgsConstructor
@EqualsAndHashCode
@Getter
public class ContractPK implements Serializable{

private String companyCode;
private String moduleCode;

@Builder
public ContractPK(String companyCode, String moduleCode) {
    this.companyCode = companyCode;
    this.moduleCode = moduleCode;
}

}

合同.java

@Entity
@Getter
@IdClass(ContractPK.class)
public class Contract extends BaseEntity{

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

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

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="company_code", referencedColumnName="company_code", insertable=false, updatable=false)
private Company company;

}

它有效 JDK17 但是当我将 jdk 版本更改为 11 时,它发生了关于

“由:org.hibernate.AnnotationException:引用 com.entity.Contract.company 的 referencedColumnNames(company_code) 未映射到单个属性”

块引用 块引用

spring-boot jpa java-11 复合主键

评论

0赞 Chris 11/15/2023
表之间的关系没有很好地定义(无论如何对我来说)。如果公司具有复合 PK,则要使任何其他表引用唯一的公司实例,它需要具有所有这些复合字段的外键。如果“代码”足够唯一,可以定义单个公司,则您实际上不需要公司的复合 PK 中包含的 biznumber。如果您在使用单个 PK 将您的实体与公司映射时遇到问题,请向我们展示代码,因为这在大多数示例中都适用于派生标识符(合同在其标识符中包含公司代码)
0赞 philipxy 11/15/2023
为什么我不应该上传代码/数据/错误的图片?ERD 是 DDL(文本)的图像。调试问题需要一个最小的可重现示例Stack Overflow 用户需要做多少研究工作? 如何询问帮助中心 你的最后一句话是无法理解的。“这两个表仅映射列代码。”--你是想说一些关于FK约束的东西吗?目前尚不清楚。使用足够的单词、句子和对部分示例的引用,以清楚和充分地表达你的意思。
0赞 차재욱 11/15/2023
首先,对不起我的问题。😥😥 我上传了有关此问题的代码。

答: 暂无答案