一、症状描述
环境迁移后,使用 JPA AUTO 方式生成主键的实体 插入数据库提示主键冲突
二、解决过程
JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
TABLE:使用一个特定的数据库表格来保存主键。
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY:主键由数据库自动生成(主要是自动增长型)
AUTO:主键由程序控制,默认配置
生成原理: JPA 会在数据库中生成 hibernate_sequence, 主键也在该表中维护。
查询日志发现是保存数据库实体时提示主键冲突,该实体主键采用 auto 生成方式,而auto方式是hibernate自己维护主键,程序启动时在数据库汇总自动生成 hibernate_sequence表(类似oracle的 sequence), 使用该表的 next_val 维护主键, 只需要将 next_val调大即可。