Java JPA、Spring Boot和PostgresQL。Webapp尝试在导入填充脚本后生成已存在的主键

Java JPA、Spring Boot和PostgresQL。Webapp尝试在导入填充脚本后生成已存在的主键,java,postgresql,spring-boot,Java,Postgresql,Spring Boot,我正在使用SpringBoot2和PostGresQL开发一个webapp。我的问题是,开发开始时使用MYSQL 8.0和H2作为数据库,我对它们没有任何问题。由于部署限制,我必须配置PostGresQL数据库 我发现在导入我的填充脚本后,我的webapp将尝试生成重复的ID,这些ID是脚本中已有的ID,而不是在数据库中包含的最后一个ID之后 这是我的BaseEntity.class /** * Simple JavaBean domain object with an id prope

我正在使用SpringBoot2和PostGresQL开发一个webapp。我的问题是,开发开始时使用MYSQL 8.0和H2作为数据库,我对它们没有任何问题。由于部署限制,我必须配置PostGresQL数据库

我发现在导入我的填充脚本后,我的webapp将尝试生成重复的ID,这些ID是脚本中已有的ID,而不是在数据库中包含的最后一个ID之后

这是我的BaseEntity.class

/**
    * Simple JavaBean domain object with an id property. Used as a base class for objects
    * needing this property.
    *
    * @author Ken Krebs
    * @author Juergen Hoeller
    */

@MappedSuperclass
public class BaseEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
protected Integer id;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public boolean isNew() {
    return this.id == null;
}

}
以及sql脚本中的一部分

-- Valoraciones Usuario 1
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (1, 4.5, 'Muy profesional, su trabajo ha sido perfecto y muy puntual.', 1, 2);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (2, 3.5, 'Profesional y puntual.', 1, 3);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (3, 2.1, 'Mucho arte, pero nada puntual con la entrega.', 1, 4);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (4, 1.0, 'Pésimo trabajo. Nada profesional.', 1, 5);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (5, 3.3, 'Puntual y barato.', 1, 6);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (6, 5.0, 'Su trabajo es increible, lo recomiendo.', 1, 7);
INSERT INTO valoracion(id, puntuacion, comentario, beaver_id, author_id) VALUES (7, 1.2, 'Malisimo trabajo, nada satisfecho.', 1, 8);

听起来您需要重新启动表上的id序列

ALTER SEQUENCE table_name_id_seq RESTART WITH 8;

在填充脚本和将实体引用到ITE中使用序列即使不需要引用实体中的序列,如果主键类型为串行,GenerationType.IDENTITY将处理该序列。