我有一個實體User
,它應該有財產manager
其中經理是另一個用戶(一個經理可以管理許多用戶,任何用戶可能只有一個經理或沒有任何)。如何使用JPA(Hibernate)創建與同一實體的關係?
我該如何執行此操作?
我試過一些標準
@ManyToOne
@JoinColumn (name = ??? /* what should be here? */, nullable = true)
private User manager;
,但它並不像看起來那麼簡單..
我有一個實體User
,它應該有財產manager
其中經理是另一個用戶(一個經理可以管理許多用戶,任何用戶可能只有一個經理或沒有任何)。如何使用JPA(Hibernate)創建與同一實體的關係?
我該如何執行此操作?
我試過一些標準
@ManyToOne
@JoinColumn (name = ??? /* what should be here? */, nullable = true)
private User manager;
,但它並不像看起來那麼簡單..
什麼問題?使用默認值,即如果您不知道如何命名連接列,則不要設置name
(應該默認爲類似MANAGER_ID的東西)。從name
屬性的Javadoc:
(可選)外鍵 列的名稱。發現其中的表格 取決於上下文。 如果加入 用於OneToOne或多對多 映射,則外鍵列位於 源實體的表中。如果 連接用於ManyToMany,則外鍵 鍵在連接表中。缺省值(如果使用單個連接列爲 ,則僅應用 ): 的連接如下:引用 關係屬性的名稱或 引用實體的字段; 「_」;所引用的主鍵列的名稱爲 。如果 有在 實體沒有這樣的引用關係 屬性或字段,連接列名被形成 作爲以下的級聯: 實體的名稱; 「_」;引用的主鍵列的名稱 。
這應該工作:
@OneToOne
@JoinColumn(name="manager")
private User manager;
您應該將要加入的列的名稱添加到您的User
實體。該名稱可以是任何你想要的,它的名字將會出現在你的數據庫中。 "manager_id"
或其他。
使用'name =「foo」'也會起作用:) – 2010-07-21 14:31:00
你說得對,那僅僅是爲了這個例子... :) – 2010-07-21 14:33:38