SpringBoot升级后如何全局配置Hibernate序列命名策略为legacy?
全局配置解决Hibernate 6.1.x中ID生成导致的表名加_SEQ后缀问题
问题背景
依赖升级后:
- spring-boot-starter-parent 从2.7.1升级至3.0.0
- mysql-connector-java 替换为 com.mysql:mysql-connector-j
- 使用 hibernate-core-6.1.5 新表命名策略
测试失败原因:Hibernate 6.x 默认切换为SEQUENCE标识符生成策略,会自动给表名添加_SEQ后缀去查找序列表,但MySQL不支持序列,导致找不到对应表。当前已通过给每个实体类添加@GeneratedValue(strategy = GenerationType.IDENTITY)临时解决,希望通过application.yml全局配置统一处理。
全局配置方案
在application.yml中添加以下配置,将Hibernate全局默认的ID生成策略设置为IDENTITY(适配MySQL自增主键):
spring: jpa: properties: hibernate: id: generator: default_strategy: identity
补充说明
- 该配置会覆盖Hibernate 6.x默认的SEQUENCE策略,所有实体类无需再单独标注
@GeneratedValue(strategy = GenerationType.IDENTITY)即可使用MySQL自增主键。 - 确保你的MySQL表主键字段已设置
AUTO_INCREMENT属性,否则IDENTITY策略无法正常生效。 - 若项目中存在需要使用其他ID生成策略的实体,仍可单独给该实体类添加
@GeneratedValue指定策略,全局配置不会覆盖局部设置。
内容的提问来源于stack exchange,提问作者Jakkins
相关产品推荐
相关产品推荐

