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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:43:10