唯一约束-密钥已经存在于许多

时间:2019-06-25 08:05:16

标签: java spring duplicates many-to-many

我在用户及其角色之间具有经典的多对多关系。 它可以正确保存第一个用户,但是当我尝试插入第二个用户时,它给了我一个与(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);

如果我用注释掉的代码中所示的新角色等创建了一个新用户角色,则一切正常,但我将重复的角色保存到数据库中。

1 个答案:

答案 0 :(得分:0)

您可以使用合并而不是持久化,因为如果实体存在,它将进行更新,否则将其插入。