2012-02-24 14 views
0

データベースへのマッピングを行うためにhibernateを使用しています。 しかし、次のエラーが発生しました:これは私のhibernate.cfg.xmlのあるhibernate例外:コレクション行を挿入できませんでした

public void saveOrUpdate(T t){ 
    Session session = HibernateUtil.getSession(); 
    Transaction transaction = session.beginTransaction(); 
    session.saveOrUpdate(t); 
    transaction.commit(); 
} 

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property> 
    <property name="hibernate.connection.password">eboxroot</property> 
    <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306 /jobtest?autoReconnect=true</property> 
    <property name="hibernate.connection.username">root</property> 
<property name="hibernate.hbm2ddl.auto">update</property> 
<property name="hibernate.cache.use_second_level_cache">false</property> 
    <property name="hibernate.cache.use_query_cache">false</property> 
<property name="hibernate.connection.autoReconnect">true</property> 
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
<property name="c3p0.min_size">5</property> 
<property name="c3p0.max_size">30</property> 
<property name="c3p0.time_out">1800</property> 
<!--property name="c3p0.max_statement">50</property--> 
<property name="c3p0.acquire_increment">5</property> 
<property name="c3p0.idle_test_period">10</property> 
<property name="c3p0.preferredTestQuery">select 1;</property> 
<property name="c3p0.debugUnreturnedConnectionStackTraces">true</property> 
<property name="hibernate.connection.autoReconnectForPools">true</property> 
<!--property name="show_sql">true</property --> 

これはすべての時間を起きていない、するsaveOrUpdateの

A exec job config finished. 
org.hibernate.exception.JDBCConnectionException: could not insert collection rows: [com.myCompany.jobsrc.ExecJob.subRunningIDs#1] 
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99) 
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
at org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1454) 
at org.hibernate.action.CollectionUpdateAction.execute(CollectionUpdateAction.java:86) 
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265) 
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:187) 
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) 
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51) 
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216) 
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) 
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) 
at com.myCompany.jobsrc.BasicDaoImpl.saveOrUpdate(BasicDaoImpl.java:38) 
at com.myCompany.jobBatch.ExecJobRoutine.generateExecJob(ExecJobRoutine.java:100) 
at com.com.myCompany.jobBatch.MarkerRoutine.execute(MarkerRoutine.java:33) 
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) 
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525) 
Caused by: java.sql.BatchUpdateException: No operations allowed after statement closed. 
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1269) 
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:955) 
at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723) 
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70) 
at org.hibernate.jdbc.BatchingBatcher.addToBatch(BatchingBatcher.java:56) 
at org.hibernate.persister.collection.AbstractCollectionPersister.insertRows(AbstractCollectionPersister.java:1427) 
... 14 more 

私の方法を時々好きです。 誰も私にいくつかのヒントを教えてもらえますか?

+0

コードがスレッド化されている場合は、問題が説明されている可能性があります。 –

答えて

0

最後に問題を解決します。これは、c3p0のmax_statementsを50に設定したためです。キャッシュは50にしかなりません。今度は、キャッシュには0を設定しました。今私は0に設定し、完璧に動作します! 助けてくれてありがとう。

2

urトレースで見ることができるように、上にorg.hibernate.exception.JDBCConnectionExceptionがあります。一度、データベース接続が問題になる可能性があります。接続の問題ではないと判断した場合は、showSqlフラグを有効にして、詳細なトレースを確認して、正確に何が原因かを調べる必要があります。私はそれが助けて欲しい

+0

ありがとうございます。私はそれが接続の問題ではないと確信しています。そしてそれはずっとずっと、まれなことではありません。私は長い間同じ種類のオブジェクトに使用していましたが、それは良いことでした。私はshowSqlに表示させることができます。あなたの提案をありがとう。すばらしい週末を! –

0
java.sql.BatchUpdateException: No operations allowed after statement closed 

しばらくしてMySQLの接続を閉じると、問題が発生する可能性があります。 autoReconnecthereをお読みください。 JDBC接続URIにautoReconnect=trueを追加する必要があります。

+0

ありがとう!しかし、autoReconnect = trueを追加しようとしましたが、それでも動作しません。 –

関連する問題