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

Spring项目生成H2数据库建表SQL时出现语法错误如何解决

错误原因

本次SQL语法报错和主键生成策略无关,核心原因是from和to属于SQL标准保留关键字,H2数据库不允许直接将保留关键字作为列名使用,因此生成的建表语句执行时触发语法校验错误,这也是其他实体类使用相同主键策略不会报错的原因。

解决方案

可任选以下任意一种方式解决问题:

  • 方案1:指定非保留字的列别名
    通过@Column注解给对应字段指定避开保留字的列名即可,修改后的实体类示例:
    @Entity
    @Table(name = "t_transaction")
    class Transaction{
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private val id: Long? = null
    
        @Column(name = "from_account")
        var from: String? = null
    
        @Column(name = "to_account")
        var to: String? = null
    
        var amount = 0
    }
    
  • 方案2:开启全局标识符自动转义
    如果不想修改字段对应的业务名称,可以在application.properties中添加如下配置,让Hibernate生成SQL时自动给所有表名、列名加双引号包裹,避开保留关键字冲突:
    spring.jpa.properties.hibernate.globally_quoted_identifiers=true
    
  • 方案3:手动给列名加转义符
    也可以直接在@Column注解的name属性中手动加反引号转义列名:
    @Column(name = "`from`")
    var from: String? = null
    
    @Column(name = "`to`")
    var to: String? = null
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:24:06