【发布时间】:2019-12-20 23:29:53
【问题描述】:
尝试在已存在行的表中插入新行会导致主键违规,因为计数器未正确递增。
我正在尝试使用 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的行,导致冲突。
另外,我试过 @GeneratedValue(strategy=GenerationType.AUTO) 没有任何运气。
似乎 Spring 没有正确地将计数器与数据库同步..
【问题讨论】:
标签: java sql spring hibernate h2