A more helpful reply.
The exception given seems to give a clue.
Caused by: org.h2.jdbc.JdbcSQLException: Concurrent update in table
"UNIQUE_a_INDEX_A": another transaction has updated or deleted the same row
It would seem you are updating the row simultaneously in 2
transactions?, Therefore giving the exception. I'm not sure why it
references the index as the table name? That would appear to be a bug?.
Maybe you have 2 simultaneous inserts in the table? I'm not sure how
MVCC handles that.
Also note that MVCC is "experimental".
Thanks, Ryan
On 26/02/2013 9:34 PM, srinivas wrote:
Hi,
We are getting this exception on trying to insert to a table:
insert into materials (id, a, b, c, d, e, f) values (null, ?, ?, ?, ?, ?,
'a') [50200-168]; nested exception is org.h2.jdbc.JdbcSQLException: Timeout
trying to lock table ; SQL statement:
insert into materials (id, a, b, c, d, e, f) values (null, ?, ?, ?, ?, ?,
'a') [50200-168]
at
org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:124)
at
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)
at
org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
at
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
at
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:379)
at
org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:645)
at com.x.MaterialRepository.save(MaterialRepository.java:281)
at
com.x.MaterialRepository.findOrCreateFrom(MaterialRepository.java:317)
at
com.x.MaterialDatabaseUpdater.folderFor(MaterialDatabaseUpdater.java:140)
at
com.x.MaterialDatabaseUpdater.initializeMaterialWithLatestRevision(MaterialDatabaseUpdater.java:102)
at
com.x.MaterialDatabaseUpdater.access$000(MaterialDatabaseUpdater.java:30)
at
com.x.MaterialDatabaseUpdater$1.doInTransaction(MaterialDatabaseUpdater.java:73)
at
com.x.transaction.TransactionCallback.doWithExceptionHandling(TransactionCallback.java:8)
at
com.x.transaction.TransactionTemplate$3.doInTransaction(TransactionTemplate.java:37)
at
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:128)
at
com.x.transaction.TransactionTemplate.executeWithExceptionHandling(TransactionTemplate.java:33)
at
com.x.MaterialDatabaseUpdater.updateMaterial(MaterialDatabaseUpdater.java:71)
at
com.x.MaterialUpdateListener.onMessage(MaterialUpdateListener.java:27)
at
com.x.MaterialUpdateListener.onMessage(MaterialUpdateListener.java:12)
at
com.x.messaging.activemq.JMSMessageListenerAdapter.runImpl(JMSMessageListenerAdapter.java:49)
at
com.x.activemq.JMSMessageListenerAdapter.run(JMSMessageListenerAdapter.java:34)
at java.lang.Thread.run(Thread.java:662)
Caused by: org.h2.jdbc.JdbcSQLException: Timeout trying to lock table ; SQL
statement:
insert into materials (id, a, b, c, d, e, f) values (null, ?, ?, ?, ?, ?,
'a') [50200-168]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:158)
at org.h2.command.Command.filterConcurrentUpdate(Command.java:276)
at org.h2.command.Command.executeUpdate(Command.java:232)
at
org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:156)
at
org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:142)
at
org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at
org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
at
org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
at
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
at
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
at
org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:648)
at
org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:374)
... 17 more
Caused by: org.h2.jdbc.JdbcSQLException: Concurrent update in table
"UNIQUE_a_INDEX_A": another transaction has updated or deleted the same row
[90131-168]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
at org.h2.message.DbException.get(DbException.java:169)
at org.h2.message.DbException.get(DbException.java:146)
at org.h2.table.RegularTable.addRow(RegularTable.java:146)
at org.h2.command.dml.Insert.insertRows(Insert.java:124)
at org.h2.command.dml.Insert.update(Insert.java:84)
at org.h2.command.CommandContainer.update(CommandContainer.java:75)
at org.h2.command.Command.executeUpdate(Command.java:230)
... 40 more
We are using: h2-1.3.168.jar with Hibernate (3.3.2.GA) & IBatis (2.3.4.726).
With following settings: jdbc:h2:" + path +
"/cruise;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MVCC=TRUE;CACHE_SIZE=131072;DATABASE_EVENT_LISTENER='"
+ ClassName + "'";
We found this post related to the error:
http://stackoverflow.com/questions/14060632/how-to-do-testing-with-hibernate-h2-using-testng
Do you have an idea when this can occur?
Regards,
Srinivas
--
View this message in context:
http://h2-database.66688.n3.nabble.com/MVCC-and-SELECT-FOR-UPDATE-tp2140527p4025850.html
Sent from the H2 Database mailing list archive at Nabble.com.
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to h2-database+unsubscr...@googlegroups.com.
To post to this group, send email to h2-database@googlegroups.com.
Visit this group at http://groups.google.com/group/h2-database?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.