gpt4 book ai didi

java - 唯一约束 - 键已存在于多对多中

转载 作者:行者123 更新时间:2023-12-02 03:57:52 24 4
gpt4 key购买 nike

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

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

最佳答案

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

关于java - 唯一约束 - 键已存在于多对多中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56749481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com