Spring Data JPA 报 SQL:1064 42000 错误

工作中遇到这样的一个问题,使用Spring Data JPA插入数据时候,dao层报这个错:
SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement
意思大概是:
SQL语句错误了,所以不能继续执行。

走查了很久,感觉自己代码没问题,以前使用save() 操作都挺顺溜啊,怎么突然就报错了,然后看了一眼SQL报错的内容:
SQL Error: 1064, SQLState: 42000
上百度一查,原来是SQL语句里面有保留关键字,表结构如下:

CREATE TABLE `table` (
  `id` varchar(50) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '主键id',
  `key` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `value` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;

JPA底层在运行SQL的时候,是这样执行的:

 insert  into table  (id, key, value)  values (?, ?, ?);

key 作为SQL的保留字,执行起来就会报1064 42000的错了。要么,建表的时候避免这些关键字,要么,使用这个符号:`

我当时不想修改字段名,因为好几个环境要跟着改,很麻烦,所以我直接就使用了第二种方法。

@Column(name = "`value`", columnDefinition = "varchar(255) comment '值'")
 private String value;

就是键盘左上角那个波浪号
在entity类的注解加这个符号之后,JPA执行的SQL是这样的:

 insert  into table  (id, `key`, `value`)  values (?, ?, ?);

以后,什么key,value,order,index都可以拿来建表了,多么的方便呀,哈哈哈~~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值