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
相关产品推荐
相关产品推荐

