Hibernate不能创建表

来源:互联网 发布:淘宝护肤品店铺简介 编辑:程序博客网 时间:2024/06/03 19:29

今天使用Hibernate 插入数据,报了You have an error in your SQL syntax;此类错误,很意外。

org.hibernate.exception.SQLGrammarException: 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 ‘key, accemail, post, role, active, place, workage) values (1, ‘john’, 1, ‘123’, ’ at line 1 
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82) 
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) 
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) 
at com.sun.proxy.Proxy6.executeUpdate(UnknownSource)atorg.hibernate.id.IdentityGeneratorGetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96) 
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58) 
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2767) 
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3278) 
at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) 
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362) 
at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203) 
at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183) 
at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167) 
at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320) 
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287) 
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) 
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) 
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) 
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) 
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) 
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:757) 
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:749) 
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:745) 
at com.xzit.ywb.action.OPER.saveObject(OPER.java:22) 
at test.test.saveObj(test.java:45) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.junit.runners.model.FrameworkMethod1.runReflectiveCall(FrameworkMethod.java:50)atorg.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)atorg.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)atorg.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)atorg.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)atorg.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)atorg.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)atorg.junit.runners.ParentRunner3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner1.schedule(ParentRunner.java:71)atorg.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)atorg.junit.runners.ParentRunner.access000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
Caused by: 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 ‘key, accemail, post, role, active, place, workage) values (1, ‘john’, 1, ‘123’, ’ at line 1 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
at com.mysql.jdbc.Util.getInstance(Util.java:387) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:939) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) 
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073) 
at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009) 
at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5094) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:497) 
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) 
… 48 more*

其原因是使用了Mysql保留字段,其中使用了‘key’关键字

从网上找了一个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、T  IME、TIMESTAMP

  原因很简单:使用用了mysql排序字段desc, 做描述信息字段,坑啊。。。。。。。。。。。。。。

  

阅读全文
0 0
原创粉丝点击