2010-07-21 132 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"或其他。

相关问题