我对项目中的实体之间的关系有问题,其中所有实体都有由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未映射到单个属性
可能是因为主要组密钥是复合的,有没有办法在不必更改实体的主键的情况下建立这种关系?
答案 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;