Spring JPA-Hibernate报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an er解决方案

问题描述

今天在使用基于Hibernate的Spring Data JPA来保存一个实体类,当提交表单时,报如下Exception:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc, imgs, plantname, price, id) values ('a', 'ddddd', '/uploads/2017/03/23/21/' at line 1

控制台输出的sql语句为:

Hibernate: insert into plants (category, desc, imgs, plantname, price, id) values (?, ?, ?, ?, ?, ?)

我的数据库表结构为:
这里写图片描述

思考过程

阅读Exception的大意,我知道是sql插入时出错了,这种情况一般是sql语句写错了。可是,我这里是使用的hibernate直接保存对象,sql语句不是我写的,怎么会出错呢?排除这个原因。然后,我又注意到了控制台的sql语句:

Hibernate: insert into plants (category, desc, imgs, plantname, price, id) values (?, ?, ?, ?, ?, ?)

我发现,这里的插入属性的顺序和我数据库表的属性顺序不同,推测,是不是这个原因导致出错的呢?于是着手验证:我将数据库表删除,然后重新创建了以category, desc, imgs, plantname, price, id这个顺序的表:
这里写图片描述
运行,发现仍然出错,故排除这个原因。
接着,我开始在百度上面搜索该异常,其中一篇博客提到了错误的原因。

解决方案

其中一篇博客中写道,这个可能是属性与mysql数据库关键字重合。我马上查看我的属性,发现desc属性很有可能跟mysql关键字重合了,于是马上将实体类和数据库中的desc属性修改为descrption属性。运行,异常消失,保存成功!

总结

这个异常卡了我一下午的时间,感觉Hibernate的异常提示有很大的误导作用,除此之外,由于自己的疏忽,使用了数据库的关键字才导致了该异常的产生。
记录下这个异常,防止以后再卡在类似的问题上,同时,也希望能对其他人起一些参照作用,让大家少浪费些时间。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值