2011-12-09 18 views
1

シームフレームワークとJPAを使用します。
私が含まれている結合テーブルのAccountPermissionを生成し、これら2つのエンティティ間の双方向関連多対多を使う(id_permission、action_permission、discriminator_permission) と(id_role、name_role)を含有するエンティティの役割JPA ManyToManyフィールド

が含まれているエンティティの権限を持っています(id_permission、id_role、name_role、action_permission、discriminator_permission)

@ManyToMany 
@JoinTable(name="AccountPermission", 
      joinColumns={@JoinColumn(name="role_id", 
            referencedColumnName="role_id"), 
         @JoinColumn(name="name_role", 
            referencedColumnName="name_role"),}, 
      inverseJoinColumns={@JoinColumn(name="action_permission", 
           referencedColumnName="action_permission"), 
           @JoinColumn(name="discriminator_permission", 
           referencedColumnName="discriminator_permission"), 
           @JoinColumn(name="permission_id", 
           referencedColumnName="permission_id")}) 

public List<Permission> getPermissions() { 
    return permissions; 
} 

public void setPermissions(List<Permission> permissions) { 
    this.permissions = permissions; 
} 

だから、あなたはすべての属性が結合テーブルに影響が見ように2つのテーブルからです。 私の問題は属性 "name_role"にあります。これは、編集可能な属性であるため、私はそれにジョイントしたくありません。どのようにしてjoinを行わずにjoinテーブルにこれらの値を保持することができますか?

答えて

3

これら2つのテーブルの主キーとは何ですか?私はid_roleがロールのプライマリキーであり、id_permissionがパーミッションのプライマリキーだと思います。

ので、唯一の両方のテーブルのIDが含まれている必要がありますテーブルを結合する場合:

@ManyToMany 
@JoinTable(name = "AccountPermission", 
      joinColumns = {@JoinColumn(name="role_id")} 
      inverseJoinColumns = {@JoinColumn(name="permission_id"}) 
public List<Permission> getPermissions() 
+0

はい、ROLE_IDとpermission_idは、役割と権限のための2つの主キーがありますが、私はインクルードがテーブルを結合する役割を持続したときに私が必要accountpermissionにはrole_idとpermission_id、さらにrole_nameとpermission_actionが含まれます –

+1

データベースの正規化について学びます。ジョインテーブルにはロールへの外部キー(role_nameを含む)とパーミッションへの別の外部キー(すでにpermission_actionが含まれている)があるため、この情報をジョインテーブルに入れる理由はありません。 –

+0

はい、私はそれを知っています...しかし、問題は私がseamとjpapermissionstoreを使用するときです。私はpermission_actionとrole_nameをテーブルaccountpermissionに保存する必要があります –

関連する問題