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

使用Hibernate的TableGenerator是否需要手动创建ID_GENERATOR表?

问题根源

你的Hibernate配置中hbm2ddl.auto属性设置为none,该配置会完全禁止Hibernate自动生成、修改数据库表结构,因此@TableGenerator依赖的ID_GENERATOR主键生成表不会被自动创建,直接触发表不存在的报错。


解决方案1:无需手动建表(推荐)

修改hibernate.cfg.xml中的hbm2ddl.auto配置,根据你的场景选择合适的取值:

  • 若要保留现有手动创建的业务数据,改为update:Hibernate只会自动新增缺失的表和字段,不会删除或修改已有数据,启动后会自动生成ID_GENERATOR表
  • 若为纯开发测试环境,可改为create:每次启动都会重建所有表,仅适合无存量数据的场景

修改示例:

<property name="hbm2ddl.auto">update</property>

解决方案2:保持现有配置,手动建表

如果你需要严格控制数据库结构,不允许Hibernate自动修改表,可手动执行H2建表语句创建ID_GENERATOR表:

CREATE TABLE ID_GENERATOR (
    SEQUENCE_NAME VARCHAR(255) NOT NULL PRIMARY KEY,
    NEXT_VAL BIGINT NOT NULL
);
-- 初始化你定义的id_generator生成器的初始值
INSERT INTO ID_GENERATOR(SEQUENCE_NAME, NEXT_VAL) VALUES ('id_generator', 1);

可选优化建议

你可以给@TableGenerator补充完整的属性配置,避免不同Hibernate版本默认值差异带来的兼容问题:

@TableGenerator(
    name = "id_generator",
    table = "ID_GENERATOR",
    pkColumnName = "SEQUENCE_NAME",
    valueColumnName = "NEXT_VAL",
    pkColumnValue = "fund_event_id",
    initialValue = 1,
    allocationSize = 10
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:15:00