我在用户及其角色之间具有经典的多对多关系。
它可以正确保存第一个用户,但是当我尝试插入第二个用户时,它给了我一个与(role_id)=(56)
已经存在的唯一密钥冲突...
我已经尝试了许多获取类型的变体。我正在使用Spring Crud存储库。
我的用户
@ManyToMany
@JoinTable(
name = "user_role",
joinColumns = @JoinColumn(name = "userId"),
inverseJoinColumns = @JoinColumn(name = "roleId")
)
private Set<Role> roles;
public void addRole(Role role) {
if (roles == null) {
this.roles = new HashSet<>();
}
this.roles.add(role);
role.getUsers().add(this);
}
public void removeRole(Role role) {
this.roles.remove(role);
role.getUsers().remove(this);
}
我的角色:
@ManyToMany(mappedBy = "roles", fetch = FetchType.EAGER)
Set<User> users;
public Role(Roles role) {
this.role = role.getRole();
this.users = new HashSet<>();
}
我的数据库填充代码:
Role userRole = roleService.createIfNotExist(Roles.ROLE_USER);
//Role userRole = new Role(Roles.ROLE_USER);
user.addRole(userRole);
//roleRepository.save(userRole);
User result = userRepository.save(user);
如果我用注释掉的代码中所示的新角色等创建了一个新用户角色,则一切正常,但我将重复的角色保存到数据库中。
答案 0 :(得分:0)
您可以使用合并而不是持久化,因为如果实体存在,它将进行更新,否则将其插入。