Spring Boot中表名与SQL关键字冲突的解决及配置咨询
解决SQL关键字表名冲突的几种方案
方案1:给表名添加转义符
直接在@Table注解的name属性里给关键字表名加上数据库对应的转义符号,JPA会自动识别并生成正确的SQL:
@Table(name = "`order`") // MySQL/MariaDB用反引号,PostgreSQL可改用双引号 public class Order { // ... 实体字段 }
不同数据库的转义符略有差异:
- MySQL/MariaDB:使用反引号
` - PostgreSQL/Oracle:使用双引号
"
方案2:修改表名(最简单直接)
既然order是SQL保留关键字,直接换个非关键字的表名,比如orders,彻底规避冲突:
@Table(name = "orders") public class Order { // ... 实体字段 }
这种方式不需要额外配置,也不会带来数据库兼容性问题,是最省心的解决思路。
方案3:全局配置自动转义标识符
如果项目里存在多个关键字表名/列名,可以在application.properties中添加Hibernate全局配置,自动给所有标识符(表名、列名)加上引号:
# 开启全局标识符引用,自动给表名/列名添加转义符 spring.jpa.properties.hibernate.globally_quoted_identifiers=true
开启后,Hibernate生成SQL时会自动给所有表名和列名加上对应数据库的转义符号,无需逐个修改实体类注解。
内容的提问来源于stack exchange,提问作者robocon321
相关产品推荐
相关产品推荐

