由于计数器无法正确递增,尝试在具有现有行的表中插入新行给我一个主键冲突。

我正在尝试使用Spring CrudRepository将新行插入到已经包含两行的表中。 如果数据库为空,则工作正常,计数器将按预期工作,当从Spring Application外部修改数据库时出现问题,似乎计数器丢失了。

桌子

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,'测试','bla @ gmail.com' ,'910e41bd-592d-4a96-a27e-cca45da762d1']“; SQL语句:

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

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

看来Spring不能正确地将计数器与数据库同步。

===============>>#1 票数:2

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

  ask by JuliusvM translate from so

===============>>#2 票数:1

您需要在实体注释之后添加以下代码,例如

@Entity @Table(name = "apiusers") @SequenceGenerator(name = "SECQNAMEINENTITY", sequenceName = "DB_SECQ NAME", allocationSize = 1) @Data public class ApiUser { 

并在中传递SECQNAMEINENTITY

 @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "SECQNAMEINENTITY") 

  ask by JuliusvM translate from so

本文未有回复,本站智能推荐: