gpt4 book ai didi

java - 复合键映射 JPA+Hibernate

转载 作者:太空宇宙 更新时间:2023-11-04 11:36:34 25 4
gpt4 key购买 nike

我在项目中实体之间的关系方面遇到问题,其中所有实体都有由 3 个字段组成的主键;

Product(**ck_del, cod_empresa, codigo**, description, cod_group, cod_tax);
Group(**ck_del, cod_empresa, codigo**, description);
Tax(**ck_del, cod_empresa, codigo**, description);

//Mapping in the entity PRODUCT
@ManyToOne
@JoinColumn(name="COD_GROUP" , referencedColumnName="CODIGO")
private Group group;

@ManyToOne
@JoinColumn(name="COD_TAX" , referencedColumnName="CODIGO")
private Tax tax;

当我尝试仅通过每个实体的字段代码将实体实体与其他两个实体映射时,会返回错误:

referencedColumnNames(CODIGO) of models.Product.group referencing models.Group not mapped to a single property

可能是因为主组键是复合的,有什么方法可以在不更改实体主键的情况下建立这种关系?

enter image description here

最佳答案

问题:

就像您在问题中预测的那样,问题来自于这样一个事实:您的实体 Id 由三个 组成,并且您在 @JoinColumn 注释中仅通过 ManyToOne 关系中的一列来引用它。

解决方案:

因此,您不必更改实体主键,但您应该在 ManyToOne 映射中引用三个连接列,而不是一个。

您应该在两种关系中将其更改为:

@ManyToOne
@JoinColumn(name="COD_TAX" , referencedColumnName="CODIGO")
private Tax tax;

至以下内容:

@ManyToOne
@JoinColumns({
@JoinColumn(name="COD_TAX" , referencedColumnName="CODIGO"),
@JoinColumn(name="CK_DEL" , referencedColumnName="CK_DEL"),
@JoinColumn(name="CODE_EMPRESA", referencedColumnName="CODE_EMPRESA")
})
private Tax tax;

关于java - 复合键映射 JPA+Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43210469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com