java - 使用 H2 和 Hibernate 的 Spring JPA 无法正确自动增量

标签 java sql spring hibernate h2

尝试在已存在行的表中插入新行会导致主键冲突,因为计数器无法正确递增。

我正在尝试使用 Spring CrudRepository 将新行插入到已经包含两行的表中。如果数据库为空,它工作正常,那么计数器将按预期工作,当从 Spring 应用程序外部修改数据库时,就会出现问题,看起来计数器丢失了。

表格

CREATE TABLE apiusers (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(250) NOT NULL,
  email VARCHAR(250) NOT NULL,
  apikey VARCHAR(250) NOT NULL
);

POJO:

@Entity
@Table(name = "apiusers")
@Data
public class ApiUser {

    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "APIUSERS_PK_SEQ")
    private Long id;

    private String name;
    private String email;
    private String apikey;

    public ApiUser() {
    }

    public ApiUser(String name, String email, String apikey) {
        this.name = name;
        this.email = email;
        this.apikey = apikey;
    }
}

我收到的错误是: 引起原因:org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException:唯一索引或主键违规:“PUBLIC.APIUSERS(ID)上的主键[1,'test','bla@gmail.com','910e41bd-592d-4a96- a27e-cca45da762d1']"; SQL语句:

这是因为 Spring 试图插入与最后一行具有相同 ID 的行,从而导致冲突。

另外,我尝试过 @GenerateValue(strategy=GenerationType.AUTO) 但没有任何运气。

Spring 似乎没有正确地将计数器与数据库同步..

最佳答案

我通过使用 @GenerateValue(strategy=GenerationType.IDENTITY) 解决了这个问题。

关于java - 使用 H2 和 Hibernate 的 Spring JPA 无法正确自动增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57494154/

相关文章:

java - 如何让JComboBox响应回车键

mysql - SQL 查询不是工作查询

mysql使用来自另一个表的关系按列从表中排序数据

php - 两种形式,两个单独的页面希望第一种形式写入 sql 中的表,第二种形式添加到填充空白的特定表

java - Spring @Controller 和 RequestMapping 根据给定参数调用不同的服务

java - Spring CamelContext 无法解析占位符

java - 从 ApplicationListener 关闭 spring 应用程序

java - Play 框架 session 和 cookie 是如何工作的?

java - instanceof 与多态性

java - 我怎样才能知道线程中断后还剩下多少时间可以 hibernate ?