如何使用JPA(Hibernate)创建与同一实体的关系?
问题描述:
我有一个实体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