ManyToMany关系,从关系表中删除记录

时间:2013-12-22 10:25:08

标签: java mysql hibernate jpa cascade

从2h开始,我正在尝试为以下问题提出解决方案,而我却找不到合适的方法:

我在MySQL db中有三个表:

角色 [role_id] [role_name]

权限 [permission_id] [permission_name]

PermissionToRole [permission_id] [role_id]

我将Role类作为关系的所有者:

@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(name="permissiontorole", 
            joinColumns={@JoinColumn(name="role_id")}, 
            inverseJoinColumns={@JoinColumn(name="permission_id")})

Permission类映射定义为:

@ManyToMany(mappedBy="permissions")
private Set<UserRole> userRoles = new HashSet<UserRole>(); 

现在,当我删除权限或角色时,这些相应的记录将从其表中删除(这是预期和期望的),但是该关系仍然保留在PermissionToRole表中,并且我不知道每当我删除任一角色时如何删除它或许可记录。当我将级联类型更改为ALL时,当我删除角色或权限时,关系将被删除,但其他记录也是如此如果我删除角色,也会删除该权限。

任何想法如何处理它?<​​/ p>

1 个答案:

答案 0 :(得分:2)

您只需要从Role.permissions集合中删除权限,即可删除角色与权限之间的关联:

for (UserRole role: permissionToDelete.getUserRoles()) {
    role.getPermissions().remove(permissionToDelete);
}
em.remove(permissionToDelete);