Spring+Hibernate中PO主键带有GeneratedValue注解时出现No value specified for parameter 7
2014-03-17 00:01
507 查看
使用Spring+Hibernate开始时,PO中的主键使用了GeneratedValue注解。在MySQL中也将对应的字段设为AUTO_INCREMENT。可是每次在保存PO时,都会报出异常:
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [com.rox.app.mirrors.forum.domain.MainPost]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.event.def.Def
4000
aultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:687)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:684)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:407)
... 9 more
Caused by: java.sql.SQLException: No value specified for parameter 7
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1718)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1556)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1500)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1485)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
从打印的SQL语句和异常来看,在执行INSERT操作时,SQL包含将主键但是没有给它赋值。比对以前的代码和配置文件都没有变化,唯一的改动就时间hibernate.xml文件改为了注解方式。怀疑是GeneratedValue设置有问题?反复修改问题依然存在。
折腾了半天,后来才在网上查到,这是Hibernate 3.2.4中的一个BUG。之前也怀疑过是Spring或Hibernate有问题,总觉得这么一个基本功能出问题的可能性应该很小。
再检查使用的Hibernate版本,3.3.1,不是3.2.4,这个问题怎么还存在?重新梳理jar包的依赖关系,才发现hibernate-entitymanager 3.3.1中依赖了Hibernate3.2.4!将依赖关系去掉,问题解决!
Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [com.rox.app.mirrors.forum.domain.MainPost]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
at org.hibernate.event.def.Def
4000
aultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:687)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:684)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:407)
... 9 more
Caused by: java.sql.SQLException: No value specified for parameter 7
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:1718)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1556)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1500)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1485)
at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:102)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
从打印的SQL语句和异常来看,在执行INSERT操作时,SQL包含将主键但是没有给它赋值。比对以前的代码和配置文件都没有变化,唯一的改动就时间hibernate.xml文件改为了注解方式。怀疑是GeneratedValue设置有问题?反复修改问题依然存在。
折腾了半天,后来才在网上查到,这是Hibernate 3.2.4中的一个BUG。之前也怀疑过是Spring或Hibernate有问题,总觉得这么一个基本功能出问题的可能性应该很小。
再检查使用的Hibernate版本,3.3.1,不是3.2.4,这个问题怎么还存在?重新梳理jar包的依赖关系,才发现hibernate-entitymanager 3.3.1中依赖了Hibernate3.2.4!将依赖关系去掉,问题解决!
相关文章推荐
- Entity 类中加了@Id 注解后仍然出现org.hibernate.AnnotationException: No identifier specified for entity 错误
- Spring JdbcTemplate No value specified for parameter 6
- No value specified for parameter 3
- 使用Spring Cloud微服务框架进行多个微服务整合时出现No converter found for return value of type:xxx异常信息
- No value specified for parameter 1
- s1s3h3框架整合插入数据报错 No value specified for parameter 3 id没有自动生成
- 更新MySQL数据库( java.sql.SQLException: No value specified for parameter 1) 异常 解决方法
- hibernate中对于数据库的Text注解出现 No Dialect mapping for JDBC type: -1解决方法
- Caused by: java.sql.SQLException: No value specified for parameter 2
- java.sql.SQLException: No value specified for parameter 16
- mybatis TypeHandler java.sql.SQLException: No value specified for parameter
- Oracle OEM 配置报错: No value was set for the parameter DBCONTROL_HTTP_PORT 解决方法
- No value for key [org.hibernate.impl.SessionFactoryImpl 异常解决
- WCF客户端引用带有 int bool 类型的方法时,会自动加上一个Specified参数的 解决方法 Web Reference for a WCF Service has Extra “IdSpecified” Parameter -摘自网络
- org.hibernate.AnnotationException: No identifier specified for entity
- MyEclipse中使用Hibernate时出现log4j:WARN No appenders could be found for logger 警告信息解决
- Hibernate报错 No identifier specified for entity:
- org.hibernate.AnnotationException: No identifier specified for entity
- Hibernate插件出现错误 java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver
- spring3 与 Hibernate4集成报错 No Session found for current thread