简体   繁体   English

Spring MVC + HIbernate ManyToMany映射,删除级联自联接

[英]Spring MVC + HIbernate ManyToMany mapping , delete cascade self join

I have two tables 我有两张桌子

Users 用户

Id | Id | Name 名称

1 | 1 | User 1 用户1

2 | 2 | User 2 用户2

User_Helper User_Helper

user_id | user_id | helper_id helper_id

1 | 1 | 2 2

The user_id & helper_id are referenced id from users table. user_id和helper_id是用户表中的引用ID。

Now, when I delete the user 1, the entry is deleted from Mapping table. 现在,当我删除用户1时,该条目将从Mapping表中删除。 But when I delete 2 , i get exception saying, it has been referenced in mapping table 但是当我删除2时,我得到例外说法,它已在映射表中引用

This is my entity code 这是我的实体代码

@ManyToMany(cascade = {CascadeType.ALL})
    @JoinTable(name = "user_helper", joinColumns = {
            @JoinColumn(name = "user_id", updatable = false)}, inverseJoinColumns = {
            @JoinColumn(name = "helper_id", updatable = false)})
    private Set<Users> helpers;

What am I missing 我错过了什么

When deleting helper, you must first remove it from any Users that reference it. 删除帮助程序时,必须先从引用它的任何用户中删除它。 That will clear the references to it from join table. 这将从连接表中清除对其的引用。

user.getHelpers().remove(helper);
session.delete(helper);

I got it working by adding one more mapping line in Users entity as 我通过在Users实体中添加一个映射行来实现它

@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "user_helper", joinColumns = {
            @JoinColumn(name = "helper_id", updatable = false)}, inverseJoinColumns = {
            @JoinColumn(name = "user_id", updatable = false)})
private Set<Users> users;

and before deleting, i clear the users 在删除之前,我清除用户

userEntity.getUsers().clear(); // so, if there are any users associated with helpers, it will be cleared from mapping table
userEntityDAO.delete(userEntity);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM