2009-08-12 24 views
0

(Id、Name、EmployeeType)を持つEmployeeエンティティクラスがあります。 EmployeeTypeエンティティ(Id、Description)説明は、REGULAR/MANAGERのいずれかです。同じエンティティ間で多対多の関係を行う方法

REGULAR型の従業員を対応するMANAGERタイプの従業員にマップする方法が混乱しています。私は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を併用しています。

答えて

0

従業員にちょうど1人のマネージャーがいれば、まず多対1の関係(多対多ではない)を行い、テーブルのManagerEmployeeIDを同じテーブルへの外部キー参照は問題ありません。

従業員が複数の管理タイプのロールを持つ可能性がある場合は、ルックアップテーブルを使用します。あなたはこれらのマネージャー型の人に特定の「役割」を割り当てる場合にも、これを使用することができます:

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

その後、あなたは何を知っている人VS「Slavedriver」対「マネージャー」対「スーパーバイザー」の役割を使用することができます。

申し訳ありませんが、私はJPA/Hibernateを知らないので、コンセプト(および擬似SQL)は私があなたに与えることができる最高です。

ほんの少し役に立ちます。