3

我可能只是误解了@JoinColumns 的工作原理,但是当我重用 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表连接起来)进行多列连接。

4

2 回答 2

14

如果您想重用映射中的一列,您应该将一列标记为insertable=false updatable=false,以便 Hibernate 知道哪个 Java 引用值是相关的。

此问题中提供了有关何时使用这些属性的更多信息。

于 2012-09-14T01:32:59.303 回答
1

使用 JoinColumn 注释时,您必须注意,根据两个表/实体之间的关联类型,属性“name”和“referencedColumnName”正在改变它们引用的位置。检查 JPA API,或在此处查看更详细的描述。

在您的情况下,“divisonLabel”属性上的 JoinColumn 的“名称”属性引用源表/实体。并且“referencedColumnName”引用了 LabelFile 表/实体中的列。因此,您试图在源表/实体中有两个“除”列。

让映射工作切换“name”和“referencedColumnName”的值。

于 2012-09-13T21:52:51.623 回答