【问题标题】:org.hibernate.exception.JDBCConnectionException: could not insert, How To Find the problem in a production enviromentorg.hibernate.exception.JDBCConnectionException:无法插入,如何在生产环境中找到问题
【发布时间】:2011-09-09 13:25:25
【问题描述】:

当您遇到这些问题时,您会从哪里开始?我在我的开发环境中重新创建这些错误时遇到问题。

我们正在树脂服务器上运行此代码。我们有插件在事务的线程中运行。

我们有一些代码会刷新会话,而有些则不会。是否有一些日志记录可以提供比这更有用的信息。

06:44:48 [错误]:AbstractHibernateFactory.java:127 - 保存了 sherlock.common.dao.BatchLog org.hibernate.exception.JDBCConnectionException:无法插入:[sherlock.common.dao.BatchLog] 在 org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99) 在 org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 在 org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64) 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2329) 在 org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2836) 在 org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) 在 org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268) 在 org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321) 在 org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204) 在 org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130) 在 org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210) 在 org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195) 在 org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117) 在 org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93) 在 org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:677) 在 org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:669) 在 org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:665) 在 framework.hibernate.service.AbstractHibernateFactory.saveOrUpdate(AbstractHibernateFactory.java:124) 在 sherlock.common.service.BatchServiceImpl.log(BatchServiceImpl.java:148) 在 sherlock.common.service.BatchServiceImpl.log(BatchServiceImpl.java:128) 在 sherlock.plugin.imports.CompanyImportPlugin.executePlugin(CompanyImportPlugin.java:184) 在sherlock.backend.job.AbstractHibernatePlugin.execute(AbstractHibernatePlugin.java:70) 在 sherlock.backend.job.AbstractPluginJobTask.run(AbstractPluginJobTask.java:180) 在 framework.util.task.TaskEngine$TaskEngineWorker.run(TaskEngine.java:174) 引起:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:语句关闭后不允许操作。 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:513) 在 com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 在 com.mysql.jdbc.Util.getInstance(Util.java:384) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929) 在 com.mysql.jdbc.StatementImpl.checkClosed(StatementImpl.java:404) 在 com.mysql.jdbc.PreparedStatement.clearParameters(PreparedStatement.java:1140) 在 com.mysql.jdbc.jdbc2.optional.PreparedStatementWrapper.clearParameters(PreparedStatementWrapper.java:805) 在 com.caucho.sql.UserPreparedStatement.clearParameters(UserPreparedStatement.java:158) 在 com.caucho.sql.UserPreparedStatement.close(UserPreparedStatement.java:724) 在 org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:563) 在 org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:291) 在 org.hibernate.id.insert.AbstractReturningDelegate.releaseStatement(AbstractReturningDelegate.java:82) 在 org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:60) ... 21 更多 06:44:48 [INFO]:plugin.java:196 - 结束插件 06:44:48 [错误]:AssertionFailure.java:45 - 发生断言失败(这可能表明 Hibernate 中存在错误,但更可能是由于会话使用不安全) org.hibernate.AssertionFailure: null id in sherlock.common.dao.BatchLog 条目(发生异常后不要刷新会话) 在 org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:82) 在 org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190) 在 org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147) 在 org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) 在 org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) 在 org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) 在 org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206) 在 org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375) 在 org.hibernate.transaction.CacheSynchronization.beforeCompletion(CacheSynchronization.java:88) 在 com.caucho.transaction.TransactionImpl.callBeforeCompletion(TransactionImpl.java:843) 在 com.caucho.transaction.TransactionImpl.commit(TransactionImpl.java:582) 在 com.caucho.transaction.TransactionManagerImpl.commit(TransactionManagerImpl.java:271) 在 com.caucho.jca.UserTransactionImpl.commit(UserTransactionImpl.java:436) 在 com.caucho.jca.UserTransactionProxy.commit(UserTransactionProxy.java:167) 在 sherlock.backend.job.AbstractPluginJobTask.endTransaction(AbstractPluginJobTask.java:126) 在 sherlock.backend.job.AbstractPluginJobTask.run(AbstractPluginJobTask.java:202) 在 framework.util.task.TaskEngine$TaskEngineWorker.run(TaskEngine.java:174) 06:44:48 [错误]:AbstractPluginJobTask.java:135 - 无法提交! javax.transaction.RollbackException: org.hibernate.AssertionFailure: null id in sherlock.common.dao.BatchLog 条目(发生异常后不要刷新会话) 在 com.caucho.transaction.TransactionImpl.callBeforeCompletion(TransactionImpl.java:847) 在 com.caucho.transaction.TransactionImpl.commit(TransactionImpl.java:582) 在 com.caucho.transaction.TransactionManagerImpl.commit(TransactionManagerImpl.java:271) 在 com.caucho.jca.UserTransactionImpl.commit(UserTransactionImpl.java:436) 在 com.caucho.jca.UserTransactionProxy.commit(UserTransactionProxy.java:167) 在 sherlock.backend.job.AbstractPluginJobTask.endTransaction(AbstractPluginJobTask.java:126) 在 sherlock.backend.job.AbstractPluginJobTask.run(AbstractPluginJobTask.java:202) 在 framework.util.task.TaskEngine$TaskEngineWorker.run(TaskEngine.java:174) 引起:org.hibernate.AssertionFailure: null id in sherlock.common.dao.BatchLog 条目(发生异常后不要刷新Session) 在 org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:82) 在 org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:190) 在 org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:147) 在 org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) 在 org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) 在 org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50) 在 org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206) 在 org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375) 在 org.hibernate.transaction.CacheSynchronization.beforeCompletion(CacheSynchronization.java:88) 在 com.caucho.transaction.TransactionImpl.callBeforeCompletion(TransactionImpl.java:843) ... 7 更多

【问题讨论】:

  • 我希望你每个线程使用一个会话,否则你会得到各种各样的错误。错误信息很清楚,Hibernate 在尝试插入 BatchLog 对象时没有找到 id。因此,您的代码中可能有错误,或者该类的 id 属性映射错误。
  • 你所说的更有用的信息是什么意思?错误信息给了你很多
  • 感谢您的帮助。据我所见,插件在自己的事务和会话中运行,其余代码在长 http 事务中运行。映射在大多数情况下都有效。
  • 更有用的信息是打印失败的 sql。即使插件作业中出现错误,也应该插入批处理日志。

标签: java mysql hibernate transactions


【解决方案1】:

不是真正的答案,但请查看:http://community.jboss.org/thread/170092(如果您还没有看到该帖子)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多