Hibernate操作MySQL使用reserved word引发错误: “You have an error in your SQL syntax; check the manual that co
来源:互联网 发布:手机考试作弊软件 编辑:程序博客网 时间:2024/06/06 00:13
今天利用Hibernate4.0上往MySQL 5数据库插入一个Entity时,一直出现以下的错误:
You have an error in your SQL syntax; check the manual thatcorresponds to your MySQL server version for the right syntax to user near `show, sid) value
一直觉得不应该啊,怎么会呢,不可能啊,自己就是在想这些无用的东西,也尝试了好多次,感觉都是徒劳,后来采取科学的解决步骤来逐步地一点一滴地循序渐进地找到解决方法,其实后来证明虽然一步一步来,看起来慢,但这毕竟是一条科学的方法,只要沿着这条道路往前走,离正确的答案只会越来越近的,肯定会迅速发现问题的所在的。这其中,我觉得排除法是一个很好的方法,例如我要插入这个Entity不成功,那我就把这个Entity的其他attribute先去掉,只保留一个attribute,然后看能否insert成功;然后逐步加入其它的attribute,直到一个attribute被加进去以后,引发了上述错误,这样我们就能够迅速地确定到底是哪一个attribute引发了上述错误,很快地找到问题的根源,有的放矢。
事实证明,开始漫无目的方法花费了一天时间都没能找到正确的解决方法,而按照后一种方法,很快就找到问题的原因(加入show这个attribute后开始出错)。下面针对此问题开始分析问题原因。
Hibernate 定义:
@Column(nullable = false)
private boolean show;
MySQL中定义是这样的:
Show bit(1) not null
一种可能是因为MySQL中的bit datatype和JAVA中的boolean不能正确转换,stackoverflow中有个类似的问题如下:
Causedby: org.hibernate.HibernateException:
Wrong column type in PUBLIC.PUBLIC.EVENT for column Checked. Found: bit,expected: boolean
I worked this out by adding columnDefinition = "BIT" to the@Column line.
@Column(name = "B", columnDefinition = "BIT", length =1)
public boolean isB() {
return b;
}
Its defined as a'BIT(1)' in the DB as well. Also worked with TINYINT. This is the easiestsolution I've found since the change is super-minor and no need to touch theDB.
Using: MySQL Server5.5.13, Hibernate 4.1.1, JDK 1.6
我按照以上的思路,改造了我的show属性,可是还是不成功,由此可见,我的问题只是与上面这个问题相似,但不是由以上原因引起的。还有一些人建议should not use BIT columns in MySQL,建议使用tinyint,但也不是问题的主要原因。
应该是show属性引起的,继续google,还是stackoverflow中有人碰到类似的问题,解决方法如下:
Ithink the problem is that ORDER is aMySQL reserved word.
To get the INSERTstatement to execute, you'd need to have that column name enclosed inbackticks, like this:
insert into folder (folder_name, `order`) values (?,?)
OKI've found solution; we still can use 'order'keyword as column name like this:
@Column(name = "`order`", length = 10,precision =0)
private int order;
好吧,既然order是MySQL的reserved word,那show也很有可能,果然改成其他名称后立即得到解决:
@Column(name = "label_show",nullable = false)
private boolean show;
查阅MySQL 官方文档,可以得到Reserved Words in MySQL:
Table 2.1. Reserved Words in MySQL 5.0
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[a]
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[b]
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[c]
LEADING
LEAVE
LEFT
LIKE
LIMIT
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
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
SONAME
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
UPGRADE[d]
USAGE
USE
USING
UTC_DATE
UTC_TIME
UTC_TIMESTAMP
VALUES
VARBINARY
VARCHAR
VARCHARACTER
VARYING
WHEN
WHERE
WHILE
WITH
WRITE
XOR
YEAR_MONTH
ZEROFILL
来自 <http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-0.html>
- Hibernate操作MySQL使用reserved word引发错误: “You have an error in your SQL syntax; check the manual that co
- Hibernate: You have an error in your SQL syntax; check the manual that corresponds to your MySQL
- Hibernate: You have an error in your SQL syntax; check the manual that corresponds to your MySQL
- 解决You have an error in your SQL syntax; check the manual that corresponds to your MySQL server错误
- mysql sqlserver hibernate 有数据库关键字 You have an error in your SQL syntax; check the manual that corres
- mysql提示错误#42000You have an error in your SQL syntax; check the manual that corresponds
- ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
- MySql-You have an error in your SQL syntax; check the manual that corresponds to your MySQL server v
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server versi
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL的问题
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
- SqlServer 索引及优化
- 每日一道算法题:输入一个表示整数的字符串,把该字符串转换成整数并输出
- Unity学习之基础脚本代码抽象类和继承总结
- ym—— Android 5.0学习之Activity过渡动画
- 最短路径Floyd详解-源代码
- Hibernate操作MySQL使用reserved word引发错误: “You have an error in your SQL syntax; check the manual that co
- 嵌入式c编程技巧_编程风格
- 有状态和无状态
- SqlServer索引的原理与应用
- 一些高效嵌入式ARM开发的编程技巧
- 从零开始----以后所以文章都发布在这里
- 如何在Eclipse中显示空格(space)和制表符(tab)
- ARM S3C2410 datasheet 重点解读
- 递归与尾递归(C语言)