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



我有两个表

用户

Id|名称

1|用户1

2|用户2

用户帮助程序(_H)

user_id | helper_id

1|2

user_id&helper_id是用户表中引用的id。

现在,当我删除用户1时,该条目将从Mapping表中删除。但当我删除2时,我得到一个异常,说它在映射表中被引用了

这是我的实体代码

@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;

我缺少什么

删除helper时,必须首先从任何引用它的用户中删除它。这将从联接表中清除对它的引用。

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

我通过在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;

在删除之前,我清除了用户

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

最新更新