【问题标题】:Hibernate ManyToMany save relation both sidesHibernate ManyToMany保存关系双方
【发布时间】:2026-02-07 00:35:01
【问题描述】:

我在用户和角色之间有一个多对多关系(成员是关系表)。我可以保存角色与用户的关系,但不能保存用户与角色的关系。

用户.java

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
public Set<Role> getRoles() {
    return roles;
}

public void setRoles(Set<Role> roles) {
    this.roles = roles;
}

角色.java

@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "members", catalog = "blackant_db", joinColumns = { @JoinColumn(name =     "user_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "role_id", nullable = false, updatable = false) })
public Set<User> getUsers() {
    return this.users;
}

public void setUsers(Set<User> users) {
    this.users = users;
}

当我将一组用户合并为一个角色时,休眠保存关系,否则休眠只更新对象用户。例如:

角色服务

Role role = roleService.findById(1);
Set<User> currentUsers = role.getUsers();
roleDAO.clear();
currentUsers.addAll(users);
role.setUsers(currentUsers);
roleDAO.merge(role);
//This works, save the user relationship into table members

用户服务

User user = userService.findById(1);
Set<Role> currentRoles = user.getRoles();
userDAO.clear();
currentRoles.addAll(roles);
user.setUsers(currentUsers);
userDAO.merge(user);
//This doesn't work, only save the user

如何保存双方的用户/角色集? 有什么建议吗?

【问题讨论】:

    标签: java hibernate hibernate-mapping


    【解决方案1】:

    您是否也尝试在 User 中添加级联语句?

    /** * (可选)必须级联到目标的操作 * 协会。 * *

    当目标集合是 {@link java.util.Map * java.util.Map},cascade 元素适用于 * 地图值。 * *

    默认为没有级联操作。 */ CascadeType[] cascade() 默认 {};

    【讨论】: