本文主要是介绍JPA @GeneratedValue AUTO 插入实体提示主键冲突,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.
- TABLE:使用一个特定的数据库表格来保存主键。
- SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
- IDENTITY:主键由数据库自动生成(主要是自动增长型)
- AUTO:主键由程序控制。
AUTO
默认的配置。如果不指定主键生成策略,默认为AUTO。
生成原理: JPA 会在数据库中生成 hibernate_sequence, 主键也在该表中维护。
问题描述: 程序迁移环境后,新建实体时程序是不是报错;
解决过程:
查询日志发现是保存数据库实体时提示主键冲突,该实体主键才用 auto 生成方式,而auto方式是hibernate自己维护主键,维护的方式是自动生成 hibernate_sequence表,使用该表的 next_val 记录当前最大主键(类似oracle的 sequence),只需要将 next_val调大即可。
这篇关于JPA @GeneratedValue AUTO 插入实体提示主键冲突的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!