我可能只是误解@JoinColumns如何工作,但是当我重用name属性时我遇到了错误。但是name属性是否映射到数据库列?我不应该重复使用吗?
我得到了错误:
Repeated column in mapping for entity: data.model.DP column: division
代码:
@Column(name = "division", nullable = false)
private String division;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumns({
@JoinColumn(name = "division_labeldefintion", referencedColumnName = "labeldefinition"),
@JoinColumn(name = "division", referencedColumnName = "abbr")
})
private LabelFile divisionLabel;
我要做的是从一个表(包含division
列)进行多列连接,并将其与LabelFile
表连接。
答案 0 :(得分:10)
如果要在映射中重用一个列,则应将其标记为insertable=false updatable=false
,以便Hibernate知道哪个Java引用值是相关的。
此question中提供了有关何时使用这些属性的详细信息。
答案 1 :(得分:1)
使用JoinColumn注释时,您必须注意,根据两个表/实体之间的关联类型,属性“name”和“referencedColumnName”正在更改它们引用的位置。 请查看JPA API或look here以获取更详细的说明。
在您的情况下,“divisonLabel”属性上的JoinColumn的“name”属性引用了源表/实体。并且“referencedColumnName”引用LabelFile表/实体中的列。 所以,你试图在源表/实体中有两个“除法”列。
使映射工作切换值为“name”和“referencedColumnName”。