Hibernate 6迁移:序列ID生成默认增量设置及代码适配
Hibernate 6 迁移方案:实体独立序列+增量100配置
核心变化说明
Hibernate 6 默认已采用「每个实体对应独立序列」的策略,且默认使用enhanced-sequence生成器,因此你原来配置的CONFIG_PREFER_SEQUENCE_PER_ENTITY=true可以直接移除。增量大小的配置可通过以下几种方式实现:
方式一:使用JPA标准注解简化代码(推荐)
直接用JPA原生的@SequenceGenerator配置增量大小,Hibernate 6会自动为每个子类生成独立序列(默认序列名为实体类名_SEQ):
@Getter @Setter @MappedSuperclass @Audited public abstract class AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity-sequence") @SequenceGenerator( name = "entity-sequence", allocationSize = 100 // 对应原配置的增量大小100 // sequenceName属性可省略,Hibernate6默认会生成「实体类名_SEQ」格式的序列名 ) private Long id; }
方式二:保留Hibernate特定注解简化配置
如果仍想使用Hibernate的enhanced-sequence策略,只需移除已默认生效的参数,仅保留增量配置即可:
@Getter @Setter @MappedSuperclass @Audited public abstract class AbstractEntity { @Id @GeneratedValue(generator = "optimized-sequence") @GenericGenerator( name = "optimized-sequence", strategy = "enhanced-sequence", parameters = { @Parameter(name = SequenceStyleGenerator.INCREMENT_PARAM, value = "100") } ) private Long id; }
方式三:全局统一配置(适合多实体场景)
如果希望所有实体都采用增量100的独立序列,可以在配置文件中全局设置,无需在代码中逐个配置:
Spring Boot 示例(application.properties):
# 启用Hibernate新生成器映射(Hibernate6默认已开启) spring.jpa.hibernate.id.new_generator_mappings=true # 全局设置序列增量大小为100 spring.jpa.properties.hibernate.id.sequence.increment_size=100
此时基类代码可简化为:
@Getter @Setter @MappedSuperclass @Audited public abstract class AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) private Long id; }
内容的提问来源于stack exchange,提问作者user1470509
相关产品推荐
相关产品推荐

