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

Spring Boot集成H2执行INSERT报expected "identifier"语法错误

问题原因

报错由3个明确的问题导致:

  • 基础SQL语法错误:H2数据库遵循标准SQL规则,单引号仅用于包裹字符串值,不能用来包裹表名、列名这类标识符,这就是异常提示expected "identifier"的直接原因。之前尝试用方括号包裹表名无效,是因为方括号是SQL Server、Access的专属转义语法,H2不支持。
  • 插入值顺序颠倒:你定义的插入列顺序为id,name,birthdate,但传入值顺序是1,sysdate(), 'Mason',相当于把日期值赋值给name字段、字符串赋值给日期字段,语法修正后也会触发类型不匹配错误。
  • 列名不匹配:实体类中日期属性为驼峰命名birthDate,Spring Boot JPA默认命名策略会自动将驼峰转换为下划线分隔的列名birth_date,你写的birthdate和实际生成的列名不一致。
修复步骤
  1. 替换data.sql里的错误插入语句,去掉错误的单引号、调整值顺序、匹配实际列名:
INSERT INTO user (id, name, birth_date)
VALUES (1, 'Mason', SYSDATE());

如果使用的H2版本将user识别为关键字需要转义,使用H2支持的双引号包裹标识符即可,不要使用单引号或方括号:

INSERT INTO "user" (id, name, birth_date)
VALUES (1, 'Mason', SYSDATE());
  1. (可选校验)启动应用后访问默认H2控制台地址/h2-console,连接应用内存库后查看JPA自动生成的user表结构,确认列名和插入语句完全匹配即可。
  2. 额外优化:实体类中导入的com.sun.istack.NotNull是JDK内部无效注解,没有实际校验作用,还会触发编译警告,直接删除该导入即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:42:19