繁体   English   中英

复合键映射JPA + Hibernate

[英]Composite key mapping JPA+Hibernate

我对项目中实体之间的关系存在问题,其中所有实体都具有由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;

当我尝试将实体实体与其他两个实体映射时,每个实体的代码只返回错误:

referenced.Product.group引用models.Group引用模型的引用名称(CODIGO)。组未映射到单个属性

可能是因为主要组密钥是复合的,有没有办法在不必更改实体的主键的情况下建立这种关系?

在此输入图像描述

问题:

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

解:

因此,您不必更改Entity主键,但是应该在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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM