2010-07-21 203 views
0

我有一個實體User,它應該有財產manager其中經理是另一個用戶(一個經理可以管理許多用戶,任何用戶可能只有一個經理或沒有任何)。如何使用JPA(Hibernate)創建與同一實體的關係?

我該如何執行此操作?

我試過一些標準

@ManyToOne 
@JoinColumn (name = ??? /* what should be here? */, nullable = true) 
private User manager; 

,但它並不像看起來那麼簡單..

回答

2

什麼問題?使用默認值,即如果您不知道如何命名連接列,則不要設置name(應該默認爲類似MANAGER_ID的東西)。從name屬性的Javadoc:

(可選)外鍵 列的名稱。發現其中的表格 取決於上下文。 如果加入 用於OneToOne或多對多 映射,則外鍵列位於 源實體的表中。如果 連接用於ManyToMany,則外鍵 鍵在連接表中。缺省值(如果使用單個連接列爲 ,則僅應用 ): 的連接如下:引用 關係屬性的名稱或 引用實體的字段; 「_」;所引用的主鍵列的名稱爲 。如果 有在 實體沒有這樣的引用關係 屬性或字段,連接列名被形成 作爲以下的級聯: 實體的名稱; 「_」;引用的主鍵列的名稱 。

1

這應該工作:

@OneToOne 
@JoinColumn(name="manager") 
private User manager; 
+1

使用'name =「foo」'也會起作用:) – 2010-07-21 14:31:00

+0

你說得對,那僅僅是爲了這個例子... :) – 2010-07-21 14:33:38

0

您應該將要加入的列的名稱添加到您的User實體。該名稱可以是任何你想要的,它的名字將會出現在你的數據庫中。 "manager_id"或其他。

相關問題