复合键映射JPA + Hibernate

时间:2017-04-04 14:43:12

标签: java hibernate jpa

我对项目中的实体之间的关系有问题,其中所有实体都有由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)models.Product.group引用models.Group未映射到单个属性

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

enter image description here

1 个答案:

答案 0 :(得分:0)

<强>问题:

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

<强>解决方案:

因此,您不必更改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;