如何使用JPA(Hibernate)创建与同一实体的关系?

我有一个实体User ,它应该有物业manager ,其中经理是另一个用户(一个经理可以管理很多用户,任何用户可能只有一个经理或没有任何经理)。

我该如何实现呢?

我试过标准的东西

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

但它并不像看起来那么简单……

有什么问题? 使用默认值,即如果您不知道如何命名连接列,则不要设置name (默认值应为MANAGER_ID)。 从name属性的javadoc:

(可选) 外键列的名称 。 找到它的表取决于上下文。 如果连接用于OneToOne或Many-ToOne映射,则外键列位于源实体的表中 。 如果连接用于ManyToMany,则外键位于连接表中。 默认值(仅在使用单个连接列时适用):以下内容的串联:引用关系属性的名称或引用实体的字段; “_”; 引用的主键列的名称。 如果实体中没有这样的引用关系属性或字段,则连接列名称形成为以下内容的串联:实体的名称; “_”; 引用的主键列的名称。

这应该工作:

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

您应该将要加入的列的名称放在User实体中。 名称可以是您想要的任何名称,以及它在数据库中的显示方式。 "manager_id"或其他什么。