2011-12-09 56 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 –