使用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
相关产品推荐
相关产品推荐

