Problem :
I recreate this error by doing the following: Dropping all tables that have anything to to with both entities. Redeploy app so hbm2dll generates the tables (works perfectly, i can see them with pgAdmin). I use my GUI to add 1 CommercieelContact. Then i execute the EQL query : select from CommercieelContact.
When doing this simple select i get a JDCB error which crashes the database. A restart of PostgreSQL and JBoss is required to get it back up.
The problem seems to occur when jboss/hibernate tries to delete a row from an empty table. The table is a jointable the represents a @OneToMany relationship.
Why is hibernate deleting rows when i'm merely doing a select? What could i have done wrong? Could it be some instruction that is stuck in some queue somewhere that hibernate tries to execute (this is a wild guess)?
More info:
Hibernate version:
Hibernate 3.1 beta 3 (comes with Jboss)
JBoss 4.0.3RC2
EJB3 RC3
Mapping documents:
The two problem entities :
CommercieelContact.java
Code:
@Entity
public class CommercieelContact extends BaseEntity {
private List<Adres> leverAdressen;
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
public List<Adres> getLeverAdressen() {
return leverAdressen;
}
public void setLeverAdressen(List<Adres> leverAdressen) {
this.leverAdressen = leverAdressen;
}
}
Code:
Adres.java:
@Entity
public class Adres extends BaseEntity {
// only non-annotated fields/getters/setters
}
Code between sessionFactory.openSession() and session.close():Full stack trace of any exception that occurs:2006-01-18 12:53:39,776 DEBUG [org.hibernate.event.def.AbstractFlushingEventListener] executing flush
2006-01-18 12:53:39,777 DEBUG [org.hibernate.persister.collection.AbstractCollectionPersister] Deleting collection: [be.profitplus.entities.contact.Commerci
2006-01-18 12:53:39,777 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 1, globally: 1)
2006-01-18 12:53:39,777 DEBUG [org.hibernate.SQL] delete from CommercieelContact_Adres where CommercieelContact_id=?
2006-01-18 12:53:39,777 DEBUG [org.hibernate.jdbc.AbstractBatcher] preparing statement
2006-01-18 12:53:39,777 DEBUG [org.hibernate.type.LongType] binding '6830' to parameter: 1
2006-01-18 12:53:39,778 DEBUG [org.hibernate.jdbc.AbstractBatcher] Adding to batch
2006-01-18 12:53:39,778 DEBUG [org.hibernate.persister.collection.AbstractCollectionPersister] done deleting collection
2006-01-18 12:53:39,778 DEBUG [org.hibernate.jdbc.AbstractBatcher] Executing batch size: 1
2006-01-18 12:53:39,889 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 2, globally: 2)
2006-01-18 12:53:39,889 DEBUG [org.hibernate.jdbc.AbstractBatcher] closing statement
2006-01-18 12:53:39,889 INFO [org.hibernate.jdbc.ConnectionManager] Skipping aggresive-release due to open resources on batcher
2006-01-18 12:53:39,893 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 0, SQLState: null
2006-01-18 12:53:39,893 ERROR [org.hibernate.util.JDBCExceptionReporter] Batch entry 0 delete from CommercieelContact_Adres where CommercieelContact_id=6830
2006-01-18 12:53:39,893 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 0, SQLState: 08006
2006-01-18 12:53:39,893 ERROR [org.hibernate.util.JDBCExceptionReporter] An I/O error occured while sending to the backend.
2006-01-18 12:53:39,893 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.JDBCConnectionException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:72)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:200)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:877)
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:185)
at org.jboss.ejb3.entity.ManagedEntityManagerFactory$SessionSynchronization.beforeCompletion(ManagedEntityManagerFactory.java:89)
at org.jboss.tm.TransactionImpl.doBeforeCompletion(TransactionImpl.java:1473)
at org.jboss.tm.TransactionImpl.beforePrepare(TransactionImpl.java:1092)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:306)
at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:162)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:74)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:134)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:61)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:39)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:63)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:32)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:91)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:189)
at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107)
at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:69)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:566)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:436)
at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:239)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:291)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:168)
Caused by: java.sql.BatchUpdateException: Batch entry 0 delete from CommercieelContact_Adres where CommercieelContact_id=6830 was aborted. Call getNextExce
at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2396)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:340)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2455)
at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:484)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:193)
... 32 more
[/code]
Code:
2006-01-18 12:53:39,900 DEBUG [org.jboss.ejb3.entity.ManagedEntityManagerFactory] ************** closing entity managersession **************
2006-01-18 12:53:39,900 DEBUG [org.hibernate.impl.SessionImpl] closing session
2006-01-18 12:53:39,900 DEBUG [org.hibernate.jdbc.AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
2006-01-18 12:53:39,900 DEBUG [org.hibernate.jdbc.AbstractBatcher] closing statement
2006-01-18 12:53:39,900 DEBUG [org.hibernate.jdbc.ConnectionManager] closing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0
2006-01-18 12:53:39,900 DEBUG [org.hibernate.util.JDBCExceptionReporter] could not log warnings
org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:201)
at org.postgresql.jdbc2.AbstractJdbc2Connection.executeTransactionCommand(AbstractJdbc2Connection.java:625)
at org.postgresql.jdbc2.AbstractJdbc2Connection.commit(AbstractJdbc2Connection.java:645)
at org.postgresql.jdbc2.AbstractJdbc2Connection.setAutoCommit(AbstractJdbc2Connection.java:608)
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.checkTransaction(BaseWrapperManagedConnection.java:362)
at org.jboss.resource.adapter.jdbc.WrappedConnection.checkTransaction(WrappedConnection.java:514)
at org.jboss.resource.adapter.jdbc.WrappedConnection.getWarnings(WrappedConnection.java:400)
at org.hibernate.util.JDBCExceptionReporter.logAndClearWarnings(JDBCExceptionReporter.java:22)
at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:338)
at org.hibernate.jdbc.ConnectionManager.cleanup(ConnectionManager.java:275)
at org.hibernate.jdbc.ConnectionManager.close(ConnectionManager.java:207)
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:309)
at org.hibernate.ejb.EntityManagerImpl.close(EntityManagerImpl.java:45)
at org.jboss.ejb3.entity.ManagedEntityManagerFactory$SessionSynchronization.afterCompletion(ManagedEntityManagerFactory.java:104)
at org.jboss.tm.TransactionImpl.doAfterCompletion(TransactionImpl.java:1508)
at org.jboss.tm.TransactionImpl.completeTransaction(TransactionImpl.java:1180)
at org.jboss.tm.TransactionImpl.commit(TransactionImpl.java:351)
at org.jboss.aspects.tx.TxPolicy.endTransaction(TxPolicy.java:162)
at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:74)
at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:134)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:61)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:39)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:63)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:32)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:91)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:88)
at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:189)
at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107)
at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AOPRemotingInvocationHandler.java:69)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:566)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:436)
at org.jboss.remoting.transport.socket.ServerThread.processInvocation(ServerThread.java:239)
at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThread.java:291)
at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread.java:168)
Caused by: java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:38)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:151)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:213)
at org.postgresql.core.PGStream.flush(PGStream.java:493)
at org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:631)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:174)
... 38 more
Name and version of the database you are using:
PostgreSQL 8.0.3
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt:
TRACE