gpt4 book ai didi

java - hibernate/Postgres : duplicate key value violates unique constraint

转载 作者:行者123 更新时间:2023-12-02 09:00:35 28 4
gpt4 key购买 nike

我在注册请求期间添加用户角色时遇到问题

这是我的数据库图:

enter image description here

我有以下类(class):第一个是实体角色:

    package application.model;

import lombok.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.persistence.*;
import java.util.List;

@NamedQueries({
@NamedQuery(name = User.GET_USERS, query = User.QUERY_GET_USERS),
})
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "users")
public class User {
public static final String GET_USERS = "User.get_users";
public static final String QUERY_GET_USERS = "select u from User u";


@Id
@NotNull
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "id")
public int id;

@NotNull
@NotEmpty
@Column(name="firstname")
private String firstname;

@NotNull
@Column(name="lastname")
private String lastname;

@NotNull
@Column(name="email")
private String email;

@NotNull
@Column(name="password")
private String password;

@JoinTable
@OneToMany
private List<Role> roles;
}

第二个实体是角色:

    package application.model;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import javax.validation.constraints.NotNull;

@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "role")
public class Role {
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public int id;

@NotNull
@Column(name="name")
private String name;

}

因此,当我通过发布请求注册新用户时,我的应用程序中有 3 个角色:

{
"firstname": "imasdie5",
"lastname": "nazasdwisko5",
"email": "masdil",
"password": "pass",
"roles": [
{ "id":2 }
]
}

第一个用户已正确注册,但是当我发送具有相同roles.id=2的第二个请求时,我有:

错误:重复的键值违反了唯一约束“uk_d9najy24fium4vkivgwjuf0hw” 详细信息: key (roles_id)=(2) 已存在。

在 dbeaver 表 users_role 中,约束 uk_d9najy24fium4vkivgwjuf0hw 的类型为 UNIQUE_KEY,所以这就是问题所在,但是如何将类型更改为非唯一?许多用户可能具有相同的角色,所以这对我来说是必要的 enter image description here

所有表都是使用 hibernate 生成的。表 users_role 不是我的应用程序中的实体,也许它应该是实体?您对我应该更改哪些内容来为许多用户添加一个角色有什么建议吗?

最佳答案

尝试使用@ManyToMany注释

    @JoinTable
@ManyToMany
private List<Role> roles;

关于java - hibernate/Postgres : duplicate key value violates unique constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60190787/

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