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

Java ManyToMany关系,从关系表中删除记录,java,mysql,hibernate,jpa,cascade,Java,Mysql,Hibernate,Jpa,Cascade,自2小时以来,我一直在尝试解决以下问题,但我就是找不到合适的方法: 我在MySQL数据库中有三个表: 角色 [角色id][角色名称] 许可 [权限id][权限名称] 许可证 [权限id][角色id] 我拥有作为关系所有者的角色类: @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) @JoinTable(name="permissiontorole",

自2小时以来,我一直在尝试解决以下问题,但我就是找不到合适的方法:

我在MySQL数据库中有三个表:

角色 [角色id][角色名称]

许可 [权限id][权限名称]

许可证 [权限id][角色id]

我拥有作为关系所有者的角色类:

@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(name="permissiontorole", 
            joinColumns={@JoinColumn(name="role_id")}, 
            inverseJoinColumns={@JoinColumn(name="permission_id")})
权限类映射定义为:

@ManyToMany(mappedBy="permissions")
private Set<UserRole> userRoles = new HashSet<UserRole>(); 
@ManyToMany(mappedBy=“权限”)
private Set userRoles=new HashSet();
现在,当我删除权限或角色时,这些相应的记录将从它们的表中删除(这是预期的,也是需要的),但关系仍然保留在PermissionToRole表中,我不知道如何在每次删除角色或权限记录时删除它们。当我将级联类型更改为“全部”时,当我删除角色或权限时,关系将被删除,但其他记录也将被删除,例如,如果我删除角色,权限也将被删除


您知道如何处理吗?

您只需从
角色中删除权限。权限
集合中删除角色与权限之间的关联:

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

是的,这很有效,但同时我找到了其他解决方案,我想知道哪一个更好。我使用on delate action=cascade在表中设置外键,这也可以在没有额外代码的情况下完成工作,那么哪一个更好,为什么?显然,一方面,我的解决方案中的代码更少,但另一方面,它增加了数据库的复杂性。通常,您希望在删除仍由角色引用的权限时引发异常,因为这意味着您可能忘记了某些内容。由于级联,盲目删除权限及其与角色的关联可以在不检查角色是否仍引用权限的情况下删除权限,这可能是个问题。是的,你是对的。不过,我还有一个问题,为了更新UserRole记录(添加其他权限),我首先需要将其从DB中拉出,并将新的权限附加到列表中?或者有更好/更快的方法吗?除了使用SQL或映射关联表并将AnyToMany关联转换为2个OneToMany/manytone关联之外,没有更快的方法。