为了账号安全,请及时绑定邮箱和手机立即绑定

通过 API POST 插入时出现重复键错误

通过 API POST 插入时出现重复键错误

潇湘沐 2023-02-23 15:39:19
我在 PostgreSQL 上有一个 BD,我有很多表,但我的问题是表 Usuario。我用这个脚本创建表:CREATE SEQUENCE usuario_id_seq;CREATE TABLE public.usuario(   id               BIGINT NOT NULL DEFAULT nextval ('usuario_id_seq'::regclass),   administrador    BOOLEAN NULL,   password         CHARACTER VARYING (20) NOT NULL,   username         CHARACTER VARYING (40) NOT NULL,   CONSTRAINT usuario_pkey PRIMARY KEY (id)      OT DEFERRABLE INITIALLY IMMEDIATE,   CONSTRAINT uk_863n1y3x0jalatoir4325ehal UNIQUE (username)      NOT DEFERRABLE INITIALLY IMMEDIATE);我插入一个用户:Insert into usuario (username, password, administrador) values ('prueba', '1234', false);这没问题,现在我在 Spring-boot 上有这个:@Entity@Table(name = "usuario")public class Usuario implements Serializable {    @Id    @GeneratedValue    private Long id;    @NotNull    @Size(max = 40)    @Column(name = "username", unique = true)    private String username;    @NotNull    @Size(max = 20)    @Column(name = "password")    private String password;    @Column(name = "administrador")    private boolean administrador;    @ManyToMany(cascade = {            CascadeType.ALL    })    @JoinTable(name = "usuario_alerta",    joinColumns = {@JoinColumn(name = "id_usuario", referencedColumnName = "id")},    inverseJoinColumns = {@JoinColumn(name = "id_alerta", referencedColumnName = "id")})    private Set<Alerta> alertasUsuario;    @ManyToMany(cascade = {            CascadeType.ALL    })    @JoinTable(name = "usuario_producto",    joinColumns = {@JoinColumn(name = "id_usuario", referencedColumnName = "id")},    inverseJoinColumns = {@JoinColumn(name = "id_producto", referencedColumnName = "id")})    private Set<Producto> productosUsuario;    // Hibernate requires a no-arg constructor    public Usuario() {    }我收到错误:Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "usuario_pkey" Detail: Key (id)=(1) already exists.这是因为我在初始化脚本中创建了 id=1 的用户。在使用 Spring-boot 之后,我可以使用 SQL 将谁插入到表中而不会出现此错误?
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

好的,我看到它@GeneratedValue有一个属性generator,所以我只是尝试添加我之前创建的序列生成器并且它可以工作。所以,解决方案是这样的:


@Id

@GeneratedValue(strategy = GenerationType.IDENTITY, generator="usuario_id_seq")

private Long id;


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信