SpringBoot连接H2数据库时DDL执行与数据插入报错求助
问题解决:H2数据库创建USER表SQL语法错误
根本原因
H2数据库中USER是内置保留关键字,直接用它作为表名会违反SQL语法规范,导致DDL执行失败、插入数据时无法准备SQL语句。删除初始化代码后程序暂时无报错,是因为此时未触发实际的表创建/数据操作,但后续通过接口操作数据库时仍会出现相同问题。
解决方案
方案1:修改实体类表名(推荐)
在User实体类上添加@Table注解,指定一个非关键字的表名(比如users或app_user):
@Entity @Table(name = "users") // 替换为非关键字表名 public class User { // 原有代码保持不变 }
方案2:强制转义表名(兼容性差,不推荐)
如果必须使用user作为表名,可通过转义方式让H2识别为普通标识符,在@Table中使用带双引号的表名:
@Entity @Table(name = "\"user\"") // 用双引号包裹表名 public class User { // 原有代码保持不变 }
验证修改
修改后恢复Application.java中的初始化代码,重新启动程序:
- Hibernate会生成正确的DDL语句(例如
create table users (...)) - 初始化数据的插入操作可正常执行
- 通过
/users接口查询或新增数据不会再出现语法错误
内容的提问来源于stack exchange,提问作者StackVeryOverFlowed
相关产品推荐
相关产品推荐

