@JoinColumns - 实体映射中的重复列

时间:2012-09-13 21:17:12

标签: java hibernate jpa

我可能只是误解@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表连接。

2 个答案:

答案 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”。