从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>
答案 0 :(得分:2)
您只需要从Role.permissions
集合中删除权限,即可删除角色与权限之间的关联:
for (UserRole role: permissionToDelete.getUserRoles()) {
role.getPermissions().remove(permissionToDelete);
}
em.remove(permissionToDelete);