SpringBoot 2.7.18集成H2 2.3.232创建表时SQL语法错误求助
问题排查与解决
错误原因
H2数据库不支持NUMBER AUTO_INCREMENT的语法:
AUTO_INCREMENT是MySQL专属的自增列语法,H2遵循SQL标准,需用GENERATED BY DEFAULT AS IDENTITY定义自增列- 原SQL未给自增列
EXERCICE_ID添加主键约束,不符合自增列的常规使用规范
修改后的SQL语句
方案一:使用H2推荐的BIGINT类型(更贴合数值自增场景)
CREATE TABLE IF NOT EXISTS EXERCICE ( EXERCICE_ID BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, TYPE_SITE_ID BIGINT, EXERCICE_META_ID BIGINT, DESC_COURT VARCHAR(512), DESC_LONG VARCHAR(2048), DT_HORS_DELAI DATE, DT_DEBUT DATE, DT_FIN DATE, DT_DEB_INSCRIPTION DATE, DT_FIN_INSCRIPTION DATE, DT_DEB_REINSCRIPTION DATE, DT_FIN_REINSCRIPTION DATE, DT_ANNULATION DATE, COMMENTAIRE VARCHAR(2048), KL_ID BIGINT, CODE VARCHAR(64), ORGANISATION_ID BIGINT );
方案二:保留NUMBER类型(H2兼容NUMBER作为数值类型)
CREATE TABLE IF NOT EXISTS EXERCICE ( EXERCICE_ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, TYPE_SITE_ID NUMBER, EXERCICE_META_ID NUMBER, DESC_COURT VARCHAR(512), DESC_LONG VARCHAR(2048), DT_HORS_DELAI DATE, DT_DEBUT DATE, DT_FIN DATE, DT_DEB_INSCRIPTION DATE, DT_FIN_INSCRIPTION DATE, DT_DEB_REINSCRIPTION DATE, DT_FIN_REINSCRIPTION DATE, DT_ANNULATION DATE, COMMENTAIRE VARCHAR(2048), KL_ID NUMBER, CODE VARCHAR(64), ORGANISATION_ID NUMBER );
补充说明
如果你的JPA实体类中EXERCICE_ID字段使用了@GeneratedValue,确保策略设置为GenerationType.IDENTITY,与H2的自增逻辑匹配:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long exerciceId;
内容的提问来源于stack exchange,提问作者Nunyet Calçada
相关产品推荐
相关产品推荐

