问题描述:
Caused by: java.sql.BatchUpdateException: 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 'check, uploader, format, category, bookpk) values ('testbook', '1234567890', 'te' at line 1
以上是使用Hibernate向mysql 5.1中存储数据时出现的错误。元数据为Book,代码如下:
package org.brucefeng.sinter.domain; import java.util.Date; import java.util.List; import org.apache.commons.lang.builder.ToStringBuilder; public class Book { private String bookPK; private String title; private String isbn; private String author; private String description; private String press; private String filePath; private boolean checked; private int edition; private int pageCount; private double size; private BookFormat format; private Category category; private Date uploadDate; private User uploader; private List<BookTag> tags; private List<BookComment> comments; public Book() { // TODO Auto-generated constructor stub } public String getBookPK() { return bookPK; } private void setBookPK(String bookPK) { this.bookPK = bookPK; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPress() { return press; } public void setPress(String press) { this.press = press; } public int getEdition() { return edition; } public void setEdition(int edition) { this.edition = edition; } public int getPageCount() { return pageCount; } public void setPageCount(int pageCount) { this.pageCount = pageCount; } public double getSize() { return size; } public void setSize(double size) { this.size = size; } public BookFormat getFormat() { return format; } public void setFormat(BookFormat format) { this.format = format; } public Date getUploadDate() { return uploadDate; } public void setUploadDate(Date uploadDate) { this.uploadDate = uploadDate; } public User getUploader() { return uploader; } public void setUploader(User uploader) { this.uploader = uploader; } public List<BookTag> getTags() { return tags; } public void setTags(List<BookTag> tags) { this.tags = tags; } public List<BookComment> getComments() { return comments; } public void setComments(List<BookComment> comments) { this.comments = comments; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; } public Category getCategory() { return category; } public void setCategory(Category category) { this.category = category; } public boolean isTransient(){ return this.bookPK==null; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((author == null) ? 0 : author.hashCode()); result = prime * result + ((category == null) ? 0 : category.hashCode()); result = prime * result + (checked ? 1231 : 1237); result = prime * result + ((comments == null) ? 0 : comments.hashCode()); result = prime * result + ((description == null) ? 0 : description.hashCode()); result = prime * result + edition; result = prime * result + ((filePath == null) ? 0 : filePath.hashCode()); result = prime * result + ((format == null) ? 0 : format.hashCode()); result = prime * result + ((isbn == null) ? 0 : isbn.hashCode()); result = prime * result + pageCount; result = prime * result + ((press == null) ? 0 : press.hashCode()); long temp; temp = Double.doubleToLongBits(size); result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + ((tags == null) ? 0 : tags.hashCode()); result = prime * result + ((title == null) ? 0 : title.hashCode()); result = prime * result + ((uploadDate == null) ? 0 : uploadDate.hashCode()); result = prime * result + ((uploader == null) ? 0 : uploader.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Book other = (Book) obj; if (author == null) { if (other.author != null) return false; } else if (!author.equals(other.author)) return false; if (category == null) { if (other.category != null) return false; } else if (!category.equals(other.category)) return false; if (checked != other.checked) return false; if (comments == null) { if (other.comments != null) return false; } else if (!comments.equals(other.comments)) return false; if (description == null) { if (other.description != null) return false; } else if (!description.equals(other.description)) return false; if (edition != other.edition) return false; if (filePath == null) { if (other.filePath != null) return false; } else if (!filePath.equals(other.filePath)) return false; if (format == null) { if (other.format != null) return false; } else if (!format.equals(other.format)) return false; if (isbn == null) { if (other.isbn != null) return false; } else if (!isbn.equals(other.isbn)) return false; if (pageCount != other.pageCount) return false; if (press == null) { if (other.press != null) return false; } else if (!press.equals(other.press)) return false; if (Double.doubleToLongBits(size) != Double .doubleToLongBits(other.size)) return false; if (tags == null) { if (other.tags != null) return false; } else if (!tags.equals(other.tags)) return false; if (title == null) { if (other.title != null) return false; } else if (!title.equals(other.title)) return false; if (uploadDate == null) { if (other.uploadDate != null) return false; } else if (!uploadDate.equals(other.uploadDate)) return false; if (uploader == null) { if (other.uploader != null) return false; } else if (!uploader.equals(other.uploader)) return false; return true; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }
其配置文件为:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.brucefeng.sinter.domain"> <class name="Book" table="book"> <id name="bookPK" column="bookpk" unsaved-value="null"> <generator class="uuid.hex"></generator> </id> <property name="title" column="title" type="string"></property> <property name="isbn" column="ISBN" type="string"></property> <property name="author" column="author" type="string"></property> <property name="press" column="press" type="string"></property> <property name="description" column="description" type="text"></property> <property name="edition" column="edition" type="integer"></property> <property name="pageCount" column="pagecount" type="integer"></property> <property name="size" column="size" type="double"></property> <property name="filePath" column="filepath" type="string"></property> <property name="uploadDate" column="uploaddate" type="timestamp"></property> <property name="check" column="check" type="boolean"></property> <many-to-one name="uploader" column="uploader" class="org.brucefeng.sinter.domain.User" unique="true" fetch="join" lazy="false" cascade="save-update"></many-to-one> <many-to-one name="format" column="format" class="org.brucefeng.sinter.domain.BookFormat" unique="true" lazy="false" fetch="join" cascade="save-update"></many-to-one> <many-to-one name="category" column="category" class="org.brucefeng.sinter.domain.Category" unique="true" fetch="join" lazy="false" cascade="all"></many-to-one> <list name="tags" table="book_tag" cascade="save-update" lazy="false"> <key column="bookpk"></key> <index column="index"></index> <many-to-many column="tagpk" class="org.brucefeng.sinter.domain.BookTag" fetch="join"></many-to-many> </list> <list name="comments" table="book_comment" cascade="all" lazy="false"> <key column="bookpk"></key> <index column="index"></index> <many-to-many column="commentpk" class="org.brucefeng.sinter.domain.BookComment" fetch="join"></many-to-many> </list> </class> </hibernate-mapping>
问题解决
在数据库关系中出现了多对一,多对多关系,相对较为复杂,但配置均正确,出现上述问题实为诡异。在查询了多方资料无果之后,想起了Mysql中存在关键字问题,如果在数据库表的列名使用关键字或保留字的话,将会出现问题。于是查了一下Mysql关键字,发现在数据库表中使用了check和index两个关键字,修改之后保存即可顺利进行。
Mysql关键字
ADD | ALL | ALTER |
ANALYZE | AND | AS |
ASC | ASENSITIVE | BEFORE |
BETWEEN | BIGINT | BINARY |
BLOB | BOTH | BY |
CALL | CASCADE | CASE |
CHANGE | CHAR | CHARACTER |
CHECK | COLLATE | COLUMN |
CONDITION | CONNECTION | CONSTRAINT |
CONTINUE | CONVERT | CREATE |
CROSS | CURRENT_DATE | CURRENT_TIME |
CURRENT_TIMESTAMP | CURRENT_USER | CURSOR |
DATABASE | DATABASES | DAY_HOUR |
DAY_MICROSECOND | DAY_MINUTE | DAY_SECOND |
DEC | DECIMAL | DECLARE |
DEFAULT | DELAYED | DELETE |
DESC | DESCRIBE | DETERMINISTIC |
DISTINCT | DISTINCTROW | DIV |
DOUBLE | DROP | DUAL |
EACH | ELSE | ELSEIF |
ENCLOSED | ESCAPED | EXISTS |
EXIT | EXPLAIN | FALSE |
FETCH | FLOAT | FLOAT4 |
FLOAT8 | FOR | FORCE |
FOREIGN | FROM | FULLTEXT |
GOTO | GRANT | GROUP |
HAVING | HIGH_PRIORITY | HOUR_MICROSECOND |
HOUR_MINUTE | HOUR_SECOND | IF |
IGNORE | IN | INDEX |
INFILE | INNER | INOUT |
INSENSITIVE | INSERT | INT |
INT1 | INT2 | INT3 |
INT4 | INT8 | INTEGER |
INTERVAL | INTO | IS |
ITERATE | JOIN | KEY |
KEYS | KILL | LABEL |
LEADING | LEAVE | LEFT |
LIKE | LIMIT | LINEAR |
LINES | LOAD | LOCALTIME |
LOCALTIMESTAMP | LOCK | LONG |
LONGBLOB | LONGTEXT | LOOP |
LOW_PRIORITY | MATCH | MEDIUMBLOB |
MEDIUMINT | MEDIUMTEXT | MIDDLEINT |
MINUTE_MICROSECOND | MINUTE_SECOND | MOD |
MODIFIES | NATURAL | NOT |
NO_WRITE_TO_BINLOG | NULL | NUMERIC |
ON | OPTIMIZE | OPTION |
OPTIONALLY | OR | ORDER |
OUT | OUTER | OUTFILE |
PRECISION | PRIMARY | PROCEDURE |
PURGE | RAID0 | RANGE |
READ | READS | REAL |
REFERENCES | REGEXP | RELEASE |
RENAME | REPEAT | REPLACE |
REQUIRE | RESTRICT | RETURN |
REVOKE | RIGHT | RLIKE |
SCHEMA | SCHEMAS | SECOND_MICROSECOND |
SELECT | SENSITIVE | SEPARATOR |
SET | SHOW | SMALLINT |
SPATIAL | SPECIFIC | SQL |
SQLEXCEPTION | SQLSTATE | SQLWARNING |
SQL_BIG_RESULT | SQL_CALC_FOUND_ROWS | SQL_SMALL_RESULT |
SSL | STARTING | STRAIGHT_JOIN |
TABLE | TERMINATED | THEN |
TINYBLOB | TINYINT | TINYTEXT |
TO | TRAILING | TRIGGER |
TRUE | UNDO | UNION |
UNIQUE | UNLOCK | UNSIGNED |
UPDATE | USAGE | USE |
USING | UTC_DATE | UTC_TIME |
UTC_TIMESTAMP | VALUES | VARBINARY |
VARCHAR | VARCHARACTER | VARYING |
WHEN | WHERE | WHILE |
WITH | WRITE | X509 |
XOR | YEAR_MONTH | ZEROFILL |
MySQL允许部分关键字用做未引起来的识别符,因为许多人以前曾使用过它们。下面列出了一些例子:
ACTION
BIT
DATE
ENUM
NO
TEXT
TIME
TIMESTAMP
发表评论
-
【转】Hibernate中inverse与cascade作用
2010-05-27 14:09 12094. hibernate如何根据pojo来更新数据库4.0 ... -
hibernate问题——a different object with the same identifier value
2009-12-20 15:44 1452最近在项目中使用Hibernate时出现a differen ... -
hibernate中java.util.Date类型映射
2009-12-20 15:27 1089在Hibernate中对于java.util.Date类 ... -
hibernate中java.util.Date类型映射
2009-12-20 15:20 9397在Hibernate中对于java.util.Date类 ... -
Log4j入门配置
2009-12-06 16:44 1720在上一篇转载中已经有log4j的详细说明,这里只是log4j入 ... -
Log4j使用总结
2009-12-06 16:19 684一、介绍 Log4j是Apache的一个开放源代码项目, ... -
Hibernate别名问题
2009-12-06 16:17 1708有个BookComment类的映射文件如下 <?x ... -
Hibernate数据类型-java数据类型-数据库数据类型对应表
2009-12-06 16:05 2643最近开始在项目中用到hibernate作为持久层框架,因为一开 ... -
java中byte转换int时为何与0xff进行与运算
2009-11-26 14:27 862在剖析该问题前请看如 ... -
Java 实现Proxy问题【续】
2009-09-21 19:35 1486纠结了好几天发现原来客户端在请求数据的时候发送了xml格式的数 ... -
Java 实现Proxy问题
2009-09-20 15:53 1415最近使用openlayers显示arcims地图,因为需要调用 ... -
struts-2.1.6问题及解决
2009-08-13 22:07 809刚刚下了struts-2.1.6,以为和前几个版本没什么两样, ... -
SummerEBooks进入准备阶段
2009-08-05 15:00 643好长时间没用java写web程序了,这段时间有点空闲时间,就用 ... -
Summerfile final终于结束了
2009-07-23 11:08 595终于把这个程序给写完了。一起开始写这个程序纯粹是闲着没事干,为 ...
相关推荐
这是个人写的利用struts+hibernate+mysql写的源代码。。 是关于一个插入数据的操作。。 便宜啊 。。。个人经验总结啊。。 欢迎大家都来顶啊。。。下次传个更好的。。更大的。。如果有什么错误,,请联系我:85322820...
程序测试环境: MyEclipse8.5编程软件 + Win7操作系统 + MySql5.0数据库 本系统使用Struts2.0 + Spring2.0 +Hibernate 3.2 (即:SSH)及以上版本架构整合模式开发 本系统作为学生学习SSH很有参考价值,实现了图书...
本系统根据企业的需求进行设计,具有以下特点:界面友好,采用人机对话方式,操作简单。信息查询灵活、快捷、数据存储安全。实现用户管理功能,主要包括用户登录与注册功能。对用户输入的数据,系统进行严格的数据...
程序测试环境: MyEclipse8.5编程软件 + Win7操作系统 + MySql5.0数据库 本系统使用Struts2.0 + Spring2.0 +Hibernate 3.2 (即:SSH)及以上版本架构整合模式开发 本系统作为学生学习SSH很有参考价值,实现了图书...
整个系统的设计过程都充分考虑了数据的安全、稳定及可靠等问题,而且操作过程简单。本系统通过科学的管理方式、便捷的服务提高了工作效率,减少了数据存储上的错误和遗漏。 大学生项目申报管理系统使用Java语言,...
程序测试环境: MyEclipse8.5编程软件 + Win7操作系统 + MySql5.0数据库 本系统使用Struts2.0 + Spring2.0 +Hibernate 3.2 (即:SSH)及以上版本架构整合模式开发 本系统作为学生学习SSH很有参考价值,实现了图书...
jdk8+tomcat8+mysql+Eclipse+maven 项目技术(必填) spring+spring mvc+hibernate+easyui+jquery+ehcache http://localhost:8080/admin/index 账号HBU001 111111 管理员admin admin 注意事项 1.系统的默认用户超级...
schema.sql# Install dependenciesbundle installjbundle install# Run tests/examplesbundle exec rspec spec故障排除如果您收到Unsupported major.minor version错误,则意味着您有另一个 JDK 版本。 尝试通过...
在技术架构上,实验室管理系统采用SSH框架(Struts2、Spring和Hibernate),这一框架结合了MVC设计模式,通过Struts2处理请求的分发,Spring负责依赖注入和事务管理,而Hibernate则处理所有与数据库相关的操作。...
其中Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包中,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包中,需要根据您所选用Hibernate版本进行正确选择。 3、Lob字段...
基于java语言,spring mvc+hibernate联合开发,mysql数据库,设置登录过滤器,错误拦截器,在必要填写字段设置啦字段长度判断,在学号工号等唯一字段进行检测,合理的数据库映射关系,在一些操作做到啦级联管理
在线考试系统用的是ssh稳定框架整合,为了保证用hibernate操作数据库不出错,所有的数据库表不是用mysql企业管理器或查询分析器来完成的,而是用hibernate的pojo类和hbm.xml文件导入的,然而,配置这些关联映射却很...
1.5.1 MySQL 5 官方版本的下载和安装,运行 32 1.5.2 MySQL 5绿色版的下载安装和运行 32 1.5.2.1 下载 32 1.5.2.2 用法图解 33 1.6 Eclipse 3.3的下载,安装和运行 35 1.7 MyEclipse 6的下载,安装和运行 37 1.7.1...
自动建表建关系,当然数据得自己加,下载下来的是oracle环境需要建id,可修改mysql环境,里面只有mysql5的驱动,版本不相同的自己去下,用mysql环境,请修改映射,把注释的id自增放出来。 别问怎么运行,因为运行不...
建议开发者使用以下环境,可以避免版本带来的问题 IDE: IntelliJ IDEA、Eclipse DB: Mysql5.7 JDK: JDK1.8 Maven: Maven3.2 运行环境 数据库服务器:Mysql5.7 JAVA平台: JRE1.8 Server: Tomcat8.5 操作系统:Windows...
12、修改了:在后台修改分类选项的选项内容后,前台使用该分类选项的主题中的选项内容出现错误的问题。 13、修复了:设置“论坛关闭的原因”后,当论坛关闭时出现的提示信息仍为默认的提示信息的错误。 14、修复了...
12、修改了:在后台修改分类选项的选项内容后,前台使用该分类选项的主题中的选项内容出现错误的问题。 13、修复了:设置“论坛关闭的原因”后,当论坛关闭时出现的提示信息仍为默认的提示信息的错误。 14、修复了...
12、修改了:在后台修改分类选项的选项内容后,前台使用该分类选项的主题中的选项内容出现错误的问题。 13、修复了:设置“论坛关闭的原因”后,当论坛关闭时出现的提示信息仍为默认的提示信息的错误。 14、修复了...
12、修改了:在后台修改分类选项的选项内容后,前台使用该分类选项的主题中的选项内容出现错误的问题。 13、修复了:设置“论坛关闭的原因”后,当论坛关闭时出现的提示信息仍为默认的提示信息的错误。 14、修复了...
用户可把查询到的生词进行加入收藏的操作,以供用户进行后续的复习查看操作,也避免出现用户对同一词语进行反复查询的情况。 3.3.6 阅读模块 本模块显示在翻译界面当中,主要为用户提供一些值得学习的英文文章,...