You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过父类全局设置所有子类@SequenceGenerator的allocationSize为1

解决方案

方法1:全局Hibernate配置(推荐)

直接在JPA/Hibernate配置中添加全局属性,统一设置所有序列生成器的allocationSize为1,无需修改实体代码:

# Spring Boot环境的application.properties
hibernate.id.optimizer.pooled.default_pool_size=1

或者在persistence.xml中配置:

<property name="hibernate.id.optimizer.pooled.default_pool_size" value="1"/>

该配置会覆盖所有使用池化优化器(默认序列生成策略的优化器)的序列分配大小,让所有继承BaseIdentifier的实体生成的序列自动使用increment by 1。

方法2:修改BaseIdentifier基类

在基类中显式定义序列生成器,利用Hibernate的占位符特性让每个子类使用专属序列:

import jakarta.persistence.*;

@MappedSuperclass
public class BaseIdentifier {
     
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity_seq_generator")
    @SequenceGenerator(
        name = "entity_seq_generator",
        sequenceName = "{entityName}_seq", // Hibernate自动替换为实体类名,如Order→orders_seq
        allocationSize = 1
    )
    @Column(updatable = false, nullable = false)
    private Long id; 
    
    // 构造方法、其他成员变量、getter和setter
}

注意要把生成策略从AUTO改为SEQUENCE,确保触发我们定义的序列生成器。每个子类实体(Order、Purchase)都会生成独立序列,且步长为1。

验证效果:配置完成后,生成的SQL会变为:

Hibernate: 
    create sequence orders_seq start with 1 increment by 1

内容的提问来源于stack exchange,提问作者user352290

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:15:06