JHipster Quarkus添加Category时报唯一索引/主键冲突问题求助
问题说明
报错信息翻译如下:
由以下原因引起:org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: 唯一索引或主键约束冲突: "PUBLIC.CATEGORY(ID)上的主键(键值:1 / CAST(1 AS BIGINT), 'Table')"
唯一索引或主键约束冲突: "PUBLIC.CATEGORY(ID)上的主键(键值:1 / CAST(1 AS BIGINT), 'Table')";
该错误表明你尝试添加的Category实体,其ID值1已经在数据库中存在,违反了主键唯一性约束。
常见原因及解决办法
数据库存在初始测试数据
JHipster生成应用时,可能会通过import.sql或Liquibase/Flyway脚本自动插入测试数据,其中已经包含ID为1的Category记录。
解决:- 检查项目
src/main/resources/config/import.sql或Liquibase的变更日志脚本,查看是否有插入Category的语句,修改或删除该语句,或者调整插入的ID值。 - 通过H2控制台(默认地址
http://localhost:8080/h2-console)清空数据库,重启应用后再尝试添加。
- 检查项目
ID生成策略配置异常
Category实体的ID生成策略如果配置不当,可能导致新生成的ID与已有ID重复。
解决:
检查Category实体类的ID字段注解,确认使用了正确的生成策略(比如JHipster默认的@GeneratedValue(strategy = GenerationType.IDENTITY)或序列生成策略),避免生成重复主键。手动指定了重复ID值
若添加Category时手动设置ID为1,而该ID已存在于数据库中,就会触发冲突。
解决:
不要手动指定ID,让框架自动生成主键;若必须手动指定,先执行SELECT * FROM CATEGORY;查询已存在的ID范围,选择未被使用的ID值。
验证步骤
启动应用后,通过H2控制台连接数据库,执行SELECT * FROM CATEGORY;,确认是否存在ID为1的记录,以此定位冲突来源。
内容的提问来源于stack exchange,提问作者Mame Sandeck Niang

