2012-09-13 265 views
3

我可能只是誤解了@JoinColumns的工作方式,但在重新使用name屬性時出現錯誤。但是名稱屬性沒有映射到數據庫列?我不應該重複使用它嗎?@JoinColumns - 實體映射中的重複列

有錯誤我越來越:

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表一起加入

回答

1

當使用JoinColumn註釋時,您必須意識到,根據兩個表之間的關聯類型/ en屬性「name」和「referencedColumnName」正在改變它們引用的位置。 查看JPA API或look here瞭解更多詳細信息。

在你的情況下,「divisonLabel」屬性上JoinColumn的「name」屬性引用源表/實體。而「referencedColumnName」引用來自LabelFile表/實體的列。 因此,您正試圖在源表/實體中擁有兩個「division」列。

要爲「名稱」和「referencedColumnName」映射工作開關值。

+0

不會切換它們會改變我從哪個表中抓取? 我想要一個「分區」列,並在我的連接中使用「分區」,並使用它來匹配LabelFile中的「abbr」。 – Johannes

+0

它會的,這就是要點。你現在編寫它的方式JPA/Hibernate試圖創建兩個名爲「division」的列;一個用於純文本字段,與任何關聯無關;第二個被用作組合鍵的一部分。 LabelFile屬性上面的註釋正在當前實體/表內創建新的字段/列。 注意:儘量不要以列和表格的形式思考,JPA和ORM在那裏隱藏數據庫,讓你使用對象來代替。 免責聲明:我在沒有編寫任何代碼的情況下輸入此代碼,因此可能是我忽略了某些內容。希望不是。 –

9

如果你想在映射中重用一列,你應該標記爲insertable=false updatable=false,讓Hibernate知道哪個Java引用值是相關的。

有關何時使用這些屬性的更多信息,請參見question

相關問題