Spring Boot+Hibernate连接MSSQL插入时提示'TABLENAME_SEQ'无效
解决Spring Boot+Hibernate连接MSSQL 2014时序列不存在的问题
方案一:改用IDENTITY自增策略
直接将实体类的ID生成策略改为GenerationType.IDENTITY,适配MSSQL的自增列特性,同时不影响批量更新:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id;
同时确保数据库中对应表的ID列设置为IDENTITY(自增),比如创建表时的SQL:
CREATE TABLE TABLENAME ( id BIGINT IDENTITY(1,1) PRIMARY KEY, -- 其他字段 );
方案二:手动创建缺失的序列
如果坚持使用GenerationType.AUTO,可以直接在MSSQL数据库中手动创建Hibernate期望的序列:
CREATE SEQUENCE TABLENAME_SEQ START WITH 1 INCREMENT BY 1;
MSSQL 2014支持序列特性,创建后Hibernate的select next value for TABLENAME_SEQ语句就能正常执行。
方案三:调整Hibernate配置强制使用IDENTITY
在application.properties中添加以下配置,让Hibernate在GenerationType.AUTO策略下优先选择IDENTITY而非SEQUENCE:
hibernate.id.new_generator_mappings=false
该配置会让Hibernate使用旧版的生成器映射规则,适配MSSQL默认的自增列场景。
补充说明
切换SQLServerDialect或SQLServer2012Dialect无效的原因是:GenerationType.AUTO的策略选择还受hibernate.id.new_generator_mappings配置影响,默认新版映射会优先选择SEQUENCE,而MSSQL虽然支持序列,但多数场景下用自增列更契合。
内容的提问来源于stack exchange,提问作者Semih.Toprak
相关产品推荐
相关产品推荐

