如何在同一个实体之间建立多对多的关系

时间:2009-08-12 20:19:17

标签: jpa many-to-many

我有一个带有(Id,Name,EmployeeType)的Employee实体类。 EmployeeType实体(Id,Description)其中Description可以是REGULAR / MANAGER。

我对如何将REGULAR类型的Employe映射到相应的MANAGER类型Employees感到困惑。我是否应该向Employee实体本身添加一个额外的字段,以便它现在变为(Id,Name,EmployeeType,ManagerEmployeeId)?或者我应该有一个查找表Employee_Manager(Id,RegularEmployeeId,ManagerEmployeeId)?

我正在考虑使用Employee_Manager查找表,我不确定该实体类的外观。以下是我的想法。我在这里走在正确的轨道上吗?

@Entity
@Table(name="EMPLOYEE")
public class Employee{
    @Id
    int id;

    @Column(name="NAME")
    String name;

    @ManyToMany(mappedBy = "regularEmployee")
    Collection<Employee> regularEmployee

    @ManyToMany
    Collection<Employee> managerEmployee;
}

PS。我使用JPA和Hibernate作为持久性提供程序。

1 个答案:

答案 0 :(得分:0)

如果你想让一个员工只有一个经理,那么首先你要做的是多对一的关系(不是多对多),并且将表中的ManagerEmployeeID作为外国人对同一个表的关键引用就好了。

如果要允许员工具有多个管理类型角色,请使用查找表。如果要为这些经理类型的人分配特定的“角色”,也可以使用此选项:

create table Supervisors (
  eid int,
  sid int,
  role varchar(16)
);

然后你可以使用“Supervisor”vs“Manager”vs“Slavedriver”vs谁知道什么角色。

抱歉,我不知道任何JPA / Hibernate,所以概念(和伪SQL)是我能给你的最好的。

希望有所帮助。