2017-02-01 6 views
4

で3つのテーブルを結合するには、私はthis solutionは私の問題を解決するかもしれないと思いました。私は、次が本当かもしれないようなプロジェクトのために、複数のアクセス権を設定する機能を実現したいと思います:ManyToManyToMany Hibernateの注釈まず

| user_id | project_id | permission_id | 
|---------|------------|---------------| 
| 1  | 1   | 1    | 
|---------|------------|---------------| 
| 1  | 1   | 2    | 
|---------|------------|---------------| 
| 1  | 2   | 1    | 
|---------|------------|---------------| 
| 1  | 2   | 2    | 
|---------|------------|---------------| 
| 2  | 1   | 1    | 
|---------|------------|---------------| 
| 2  | 1   | 2    | 
|---------|------------|---------------| 
| 2  | 2   | 1    | 
|---------|------------|---------------| 
| 2  | 2   | 2    | 
+0

地図のキー/値が実体であるならば、それがされElementCollectionではありません。 JPA仕様 –

答えて

2

あなたの関係テーブルに専用のエンティティを使用することができます。これは、たとえば、独自の属性との関係を宣言する方法です。
これは、次の実装につながる:

@Entity 
@IdClass(PermissionAssignation.class) 
public class PermissionAssignation { 

    @Id 
    @ManyToOne 
    @JoinColumn(name="user_id") 
    private User user; 

    @Id 
    @ManyToOne 
    @JoinColumn(name="project_id") 
    private Project project; 

    @Id 
    @ManyToOne 
    @JoinColumn(name="permission_id") 
    private Permission permission; 
    ... 
} 

私はこの記事で見つかったソリューションを使用:Hibernate and no PK

それはフィールドでPKを(私はそれをテストしていない)を作成する方法について説明します。 動作しない場合は、EmbeddedIdクラスを使用することをお勧めします。

そして、あなたはあなたの関係が双方向になりたい場合は(あなたが/必要性を好むよう、またはList)、あなたはSet<PermissionAssignation>を使用することができます。

@Entity 
public class User { 

     @OneToMany(mappedBy="user") 
     private Set<PermissionAssignation> permissions; 

} 
+0

に従ってManyToManyが必要です。これは完全に機能しました。私が追加したのは、ユーザーがプロジェクトのアクセス許可を調べるのを手伝うためのリストでした。プロジェクトをリストに入れることで、ユーザーはプロジェクトを「見る」ことができ、権限によってプロジェクトでさまざまなアクションをとることができます。 – Rawr