JPA ManyToMany字段

时间:2011-12-09 11:19:23

标签: hibernate jpa ejb ejb-3.0 seam

我使用seam框架和JPA 我有一个实体权限包含(id_permission,action_permission,discriminator_permission) 和包含(id_role,name_role)

的实体角色

我在这两个实体之间使用双向关联ManyToMany生成包含(id_permission,id_role,name_role,action_permission,discriminator_permission)的连接表AccountPermission

@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”,我不想与它联合,因为它是一个可编辑的属性。那么如何在不连接的情况下将这些值保留在连接表上。

1 个答案:

答案 0 :(得分:3)

这两个表的主键是什么?我猜id_role是角色的主键,而id_permission是许可的主键。

如果是这样,连接表应该只包含两个表的ID:

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