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

来源:互联网 发布:mac os 卸载程序 编辑:程序博客网 时间:2024/05/16 06:17

问题描述

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

1 0
原创粉丝点击