2011-12-09 60 views
1

我使用seam框架和JPA。
我有一個包含(id_permission,action_permission,discriminator_permission) 幷包含一個實體的作用(id_role,name_role)JPA ManyToMany字段

我用的是雙向關聯多對多生成包含連接表AccountPermission這兩個實體之間的實體許可(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; 
} 

所以,你看到的影響在連接表中的所有屬性都來自這兩個表。 我的問題是屬性「name_role」,我不想與它聯合,因爲它是一個可編輯的屬性。所以如何在不加入連接的情況下將這些值保存在連接表中。

回答

3

這兩張表的主鍵是什麼。我猜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是角色和權限兩個主鍵,但我需要的時候我堅持的連接表中的作用accountpermission將包含role_id和permission_id以及role_name和permission_action –

+1

瞭解數據庫規範化。沒有理由將此信息放入連接表中,因爲連接表具有該角色的外鍵(該角色包含角色名)和該權限的另一外鍵(已包含permission_action)。 –

+0

是的,我知道......但問題是,當我使用j seammissionstore與縫我需要在表accountpermission存儲permission_action和role_name –