| Hi there
 I' m having a problem with the following scenario, which I hope is something some of you might have seen before.
 I have looked it up in the forum without avail, so any help will be really appreciated
 I'm testing concurrent access , therefore, I chose to launch two threads, each with their own session and making two different instances persistent.
 it fails when updating one of the related tables with the below described exception.
 any hint?
 I have versioned data, as described in one of the mapping documents here attached.
 
 Hibernate version:
 2.0.6
 Mapping documents:
 
 <hibernate-mapping>
 
 <class name="com.accovia.bookingFileManager.dao.domain.PersistentBkTraveler" table="bk_traveller">
 <!-- Primary key -->
 <id name="id" type="big_decimal" column="bk_traveller_id">
 <generator class="com.accovia.bookingFileManager.dao.services.BigDecimalGenerator" />
 </id>
 
 <!--  -->
 <version name="version" type="short" column="VERSION" />
 
 <!--  -->
 <component name="travelerReferenceID" class="com.accovia.travel.core.traveler.TravelerReferenceID">
 <property name="registryCode" column="traveller_reg_cd" type="string" length="16" />
 <property name="key" column="traveller_ref_key" type="string" length="16" />
 </component>
 
 <!-- Person's description  -->
 <component name="personDesc" class="com.accovia.business.core.person.PersonDesc">
 <property name="fullName" column="name" type="string" length="50" />
 <property name="birthDate" column="birth_dt" type="date">
 <column name="birthdate" sql-type="DATE" />
 </property>
 <component name="ageWrapper" class="com.accovia.business.generic.age.AgeSimpleImpl">
 <component name="ageCategoryRange" class="com.accovia.business.generic.age.AgeCategoryRangeImpl">
 <property name="categoryCode" column="age_category_cd" type="string" length="16"></property>
 </component>
 </component>
 </component>
 <!--end  Person's description  -->
 
 
 
 <!-- many end of a many to many relationship, and it uses an associated
 table bk_item_traveller
 -->
 
 <set name="persistentBookTxItems" cascade="none" inverse="true" table="bk_item_traveller" outer-join="false">
 <key column="bk_traveller_id"/>
 <many-to-many class="com.accovia.bookingFileManager.dao.domain.PersistentBkItem" column="bk_item_id"/>
 </set>
 
 </class>
 </hibernate-mapping>
 
 
 
 Code between sessionFactory.openSession() and session.close():
 
 session = open();
 stmt= session.connection().createStatement();
 //String SETLOCKMODEQUERY = "set lock mode to wait 3";
 //String SETISOLATIONLEVEL="set isolation to repeatable read";
 
 //stmt.executeUpdate(SETLOCKMODEQUERY);
 //stmt.executeUpdate(SETISOLATIONLEVEL);
 
 aPersistentBookingHeader = (PersistentBookingHeader) storeObject(session, aPersistentBookingHeader);
 
 } catch (DAOException e) {
 logger.error(e.getMessage(), e);
 throw e;
 }catch (SQLException ex)
 {
 logger.error(ex.getMessage(), ex);
 }catch(HibernateException ex)
 {
 logger.error(ex.getMessage(), ex);
 }
 finally {
 logger.debug("Exit method saveBookingFileDesc");
 try {
 stmt.close();
 } catch (SQLException e1) {
 // TODO Auto-generated catch block
 e1.printStackTrace();
 }
 //close();
 }
 return aPersistentBookingHeader;
 }
 
 
 
 
 Full stack trace of any exception that occurs:
 
 - SQL Error: -244, SQLState: IX000
 - Could not do a physical-order read to fetch next row.
 - SQL Error: -107, SQLState: IX000
 - ISAM error: record is locked.
 - SQL Error: -244, SQLState: IX000
 - Could not do a physical-order read to fetch next row.
 - SQL Error: -107, SQLState: IX000
 - ISAM error: record is locked.
 - Could not synchronize database state with session
 java.sql.SQLException: Could not do a physical-order read to fetch next row.
 at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:2996)
 at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3310)
 at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2263)
 at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2183)
 at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:692)
 at com.informix.jdbc.IfxResultSet.executeUpdate(IfxResultSet.java:308)
 at com.informix.jdbc.IfxStatement.executeUpdateImpl(IfxStatement.java:857)
 at com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedStatement.java:279)
 at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:639)
 at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:611)
 at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:31)
 at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2100)
 at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2062)
 at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2005)
 at com.accovia.infra.dao.BaseHibernateDAO.storeObject(BaseHibernateDAO.java:208)
 at com.accovia.bookingFileManager.dao.BookingFileManagerDaoImplThread.savePersistentBookingHeader(BookingFileManagerDaoImplThread.java:50)
 at com.accovia.bookingFileManager.tests.UserRequest.run(UserRequest.java:46)
 - Hibernate exception: Could not synchronize database state with session
 com.accovia.infra.dao.DAOException: Hibernate exception: Could not synchronize database state with session
 at com.accovia.infra.dao.BaseHibernateDAO.storeObject(BaseHibernateDAO.java:214)
 at com.accovia.bookingFileManager.dao.BookingFileManagerDaoImplThread.savePersistentBookingHeader(BookingFileManagerDaoImplThread.java:50)
 at com.accovia.bookingFileManager.tests.UserRequest.run(UserRequest.java:46)
 Caused by:
 net.sf.hibernate.JDBCException: Could not synchronize database state with session
 at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2069)
 at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2005)
 at com.accovia.infra.dao.BaseHibernateDAO.storeObject(BaseHibernateDAO.java:208)
 ... 2 more
 Caused by:
 java.sql.SQLException: Could not do a physical-order read to fetch next row.
 at com.informix.jdbc.IfxSqli.addException(IfxSqli.java:2996)
 at com.informix.jdbc.IfxSqli.receiveError(IfxSqli.java:3310)
 at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2263)
 at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2183)
 at com.informix.jdbc.IfxSqli.executeCommand(IfxSqli.java:692)
 at com.informix.jdbc.IfxResultSet.executeUpdate(IfxResultSet.java:308)
 at com.informix.jdbc.IfxStatement.executeUpdateImpl(IfxStatement.java:857)
 at com.informix.jdbc.IfxPreparedStatement.executeUpdate(IfxPreparedStatement.java:279)
 at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:639)
 at net.sf.hibernate.persister.EntityPersister.update(EntityPersister.java:611)
 at net.sf.hibernate.impl.ScheduledUpdate.execute(ScheduledUpdate.java:31)
 at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2100)
 at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2062)
 ... 4 more
 Caused by:
 java.sql.SQLException: ISAM error: record is locked.
 
 
 Name and version of the database you are using:
 
 
 Informix 7.1
 
 The generated SQL (show_sql=true):
 Hibernate: insert into informix.bk_segment (VERSION, parent_bk_seg_id, channel_cd, bk_ref_key, bk_reg_cd, status_cd, booking_id, bk_segment_id) values (?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_lts (VERSION, channel_cd, status_cd, bk_segment_id, ext_ref_key, ext_ref_cd, bk_lts_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.booking_header (VERSION, desc, country_cd, lang_cd, departure_dt, return_dt, client_reg_cd, client_ref_key, destination_cd, origin_cd, booking_reg_cd, booking_ref_key, contract_no, start_stay_dt, end_stay_dt, net_amt, curr_cd, min_deposit_amt, group_cd, bk_status_cd, user_cd, create_dtt, mod_dtt, brand_cd, sales_channel_cd, booking_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_item (VERSION, desc, bk_lts_id, salesprc_reg_cd, salesprc_ref_key, categ_cd, net_sales_price, salespers_reg_cd, salespers_ref_key, product_cd, qty_sales_price, tx_limit_dtt, inventory_reg_cd, inventory_ref_key, service_type_cd, product_reg_cd, bk_status_cd, start_dt, end_dt, resource_type, product_status_cd, user_cd, create_dtt, mod_dtt, bk_item_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_segment (VERSION, parent_bk_seg_id, channel_cd, bk_ref_key, bk_reg_cd, status_cd, booking_id, bk_segment_id) values (?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_traveller (VERSION, traveller_reg_cd, traveller_ref_key, name, birth_dt, age_category_cd, bk_traveller_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_lts (VERSION, channel_cd, status_cd, bk_segment_id, ext_ref_key, ext_ref_cd, bk_lts_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_item (VERSION, desc, bk_lts_id, salesprc_reg_cd, salesprc_ref_key, categ_cd, net_sales_price, salespers_reg_cd, salespers_ref_key, product_cd, qty_sales_price, tx_limit_dtt, inventory_reg_cd, inventory_ref_key, service_type_cd, product_reg_cd, bk_status_cd, start_dt, end_dt, resource_type, product_status_cd, user_cd, create_dtt, mod_dtt, bk_item_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_item (VERSION, desc, bk_lts_id, salesprc_reg_cd, salesprc_ref_key, categ_cd, net_sales_price, salespers_reg_cd, salespers_ref_key, product_cd, qty_sales_price, tx_limit_dtt, inventory_reg_cd, inventory_ref_key, service_type_cd, product_reg_cd, bk_status_cd, start_dt, end_dt, resource_type, product_status_cd, user_cd, create_dtt, mod_dtt, bk_item_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_traveller (VERSION, traveller_reg_cd, traveller_ref_key, name, birth_dt, age_category_cd, bk_traveller_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_traveller (VERSION, traveller_reg_cd, traveller_ref_key, name, birth_dt, age_category_cd, bk_traveller_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_lts (VERSION, channel_cd, status_cd, bk_segment_id, ext_ref_key, ext_ref_cd, bk_lts_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_item (VERSION, desc, bk_lts_id, salesprc_reg_cd, salesprc_ref_key, categ_cd, net_sales_price, salespers_reg_cd, salespers_ref_key, product_cd, qty_sales_price, tx_limit_dtt, inventory_reg_cd, inventory_ref_key, service_type_cd, product_reg_cd, bk_status_cd, start_dt, end_dt, resource_type, product_status_cd, user_cd, create_dtt, mod_dtt, bk_item_id) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 Hibernate: update informix.bk_traveller set VERSION=?, traveller_reg_cd=?, traveller_ref_key=?, name=?, birth_dt=?, age_category_cd=? where bk_traveller_id=? and VERSION=?
 Hibernate: insert into informix.bk_traveller (VERSION, traveller_reg_cd, traveller_ref_key, name, birth_dt, age_category_cd, bk_traveller_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: insert into informix.bk_lts (VERSION, channel_cd, status_cd, bk_segment_id, ext_ref_key, ext_ref_cd, bk_lts_id) values (?, ?, ?, ?, ?, ?, ?)
 Hibernate: update informix.bk_traveller set VERSION=?, traveller_reg_cd=?, traveller_ref_key=?, name=?, birth_dt=?, age_category_cd=? where bk_traveller_id=? and VERSION=?\
 
 Debug level Hibernate log excerpt:
 
 
 |