java - Spring Data Jpa不会自动获取下一个ID(PK),它总是从1开始

标签 java spring-boot spring-data-jpa jpa-2.2 hibernate-6.x

我正在开发 Spring Boot (2.1.7.RELEASE) +Data Jpa + Postgres 示例。在此示例中,我显式传递 EMP_ID value=100,接下来我允许 data-jpa 自动获取下一个 Id,即 101。我不确定为什么它不能以这种方式工作?

员工.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Entity
public class Employee extends BaseEntity{

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "EMP_ID", unique = true, nullable = false)
    private Integer empId;

    @Column(name = "EMP_NAME", unique = true, nullable = false)
    private String empName;

    @Column(name = "EMP_EMAIL", unique = true, nullable = false)
    private String empEmail;


    @Builder(builderMethodName="eBuilder")
    public Employee(Integer empId, String empName, String empEmail,
            Instant createdDate, Instant lastUpdateDate,String createUser, String lastUpdateUser) {
        super(createdDate, lastUpdateDate, createUser, lastUpdateUser);
        this.empId = empId;
        this.empName = empName;
        this.empEmail = empEmail;
    }
}

BaseEntity.java

@Data
@MappedSuperclass
@NoArgsConstructor
@AllArgsConstructor
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
    @CreatedDate
    @Column(name = "createdDate", nullable = false, updatable = false)
    private Instant createdDate;

    @Column(name = "lastUpdateDate", nullable = false)
    @LastModifiedDate
    private Instant lastUpdateDate;

    @Column(name = "createUser", nullable = false, length = 50)
    private String createUser;

    @Column(name = "lastUpdateUser", length = 50)
    private String lastUpdateUser;
}

MainApp.java

@SpringBootApplication
@EnableJpaAuditing
public class MyExampleApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(MyExampleApplication.class, args);
    }

    @Autowired
    private EmployeeRepository employeeRepository;

    @Override
    public void run(String... args) throws Exception {
        Employee e = Employee.eBuilder().empId(100).empName("Shrutika")
                .empEmail("shrutika@hotmail.com")
                .createUser("Shrutika")
                .lastUpdateUser("Shrutika")
                .build();

        employeeRepository.save(e);

        Employee e1 = Employee.eBuilder().empName("Shantaram")
                .empEmail("shantaram@hotmail.com")
                .createUser("Shantaram")
                .lastUpdateUser("Shantaram")
                .build();
        employeeRepository.save(e1);
    }
}

enter image description here

即使我在下面使用,仍然效果不佳

@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "emp_generator")
    @SequenceGenerator(name="emp_generator", sequenceName = "emp_seq", allocationSize=1)
    @Column(name = "EMP_ID", unique = true, nullable = false)
    private Integer empId;

Spring JIRA:https://jira.spring.io/browse/DATAJPA-1588

最佳答案

确保数据库的类型为EMP_ID:SERIALInteger。要将 IDENTITY 与 postgres 一起使用,它必须是 SERIAL ( https://www.postgresql.org/docs/8.1/datatype.html#DATATYPE-SERIAL )。

关于java - Spring Data Jpa不会自动获取下一个ID(PK),它总是从1开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453120/

相关文章:

Java 元数据提取器导致 java.lang.NoClassDefFoundError

java - JVM 是否通过在同一方法中存储相似方法调用的结果来修复我的低效代码?

java - Xuggler NoClassDefFoundError

java - spring boot 应用程序重新启动并显示消息 "Tomcat started"

spring-boot - ElasticsearchRestTemplate滚动获取下一页

java - 在查询注释中更新时间戳字段 Spring JPA

java - 在java中解压字节数组

rest - Jhipster + REST 客户端 + 身份验证

mysql - 使用 docker compose 的 Spring Boot mysql 应用程序问题

java - 尝试使用 iText7 合并合并 pdf,但是当我打开最终合并的 pdf 时,它说无法加载 pdf 文档