Using Hibernate with JPA a create and update the same object twice in a single session. Doing this for the second time I'll get a OptimisticLockException. How can this happen, I tought this will only happen if the object is changed in another session. In the second update the version column is set wrong. Any idea what's wrong?
Thanks
Dieter
Parts from the log.
Insert first:
Code:
 DEBUG org.hibernate.SQL: 
    insert 
    into
        ATCBVersicherungsvertrag
        (CREATED_BY, txId, version, invalidatedAt, validTo, bausteinId, bruttoPraemie, dokumentenPraemie, fachlicherSchluessel, nettoPraemie, orginalBeginnDatum, praemieBerechnetBis, praemienPeriode, summeNachlaesse, summeZuschlaege, versicherungssteuerBetrag, ablauf, avbVersion, bruttoPraemieZW, buendel_bndNr, extended, gesetz, hauptfaelligkeit, leistungsEmpf_oapId, leistungsEmpf_partnerId, nettoPraemieZW, nettoTarifPraemie, oap_oapId, praemienzahler_oapId, praemienzahler_partnerId, sparte, status, verlaengerung, versicherungsAenderung, versicherungssteuerProzent, waehrung, zahlungsPeriode, zahlweg, createdAt, mandatorId, validFrom, vtrNr) 
    values
        (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
 TRACE org.hibernate.type.StringType: binding null to parameter: 1
 TRACE org.hibernate.type.StringType: binding '12345' to parameter: 2
 TRACE org.hibernate.type.IntegerType: binding '0' to parameter: 3
 TRACE org.hibernate.type.TimestampType: binding null to parameter: 4
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2999' to parameter: 5
 TRACE org.hibernate.type.StringType: binding 'P_Hausrat_Versicherung::P_Hausrat_Versicherung' to parameter: 6
 TRACE org.hibernate.type.BigDecimalType: binding '459.39' to parameter: 7
 TRACE org.hibernate.type.BigDecimalType: binding '0.0' to parameter: 8
 TRACE org.hibernate.type.StringType: binding '0' to parameter: 9
 TRACE org.hibernate.type.BigDecimalType: binding '386.03999999999996' to parameter: 10
 TRACE org.hibernate.type.DateType: binding '01 Januar 2009' to parameter: 11
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2009' to parameter: 12
 TRACE org.hibernate.type.StringType: binding '12' to parameter: 13
 TRACE org.hibernate.type.BigDecimalType: binding '0.0' to parameter: 14
 TRACE org.hibernate.type.BigDecimalType: binding '0.0' to parameter: 15
 TRACE org.hibernate.type.BigDecimalType: binding '73.35000000000001' to parameter: 16
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2011' to parameter: 17
 TRACE org.hibernate.type.StringType: binding 'ohne' to parameter: 18
 TRACE org.hibernate.type.BigDecimalType: binding '459.39' to parameter: 19
 TRACE org.hibernate.type.StringType: binding null to parameter: 20
 TRACE org.hibernate.type.BooleanType: binding 'false' to parameter: 21
 TRACE org.hibernate.type.StringType: binding null to parameter: 22
 TRACE org.hibernate.type.StringType: binding '01.01.' to parameter: 23
 TRACE org.hibernate.type.StringType: binding null to parameter: 24
 TRACE org.hibernate.type.StringType: binding null to parameter: 25
 TRACE org.hibernate.type.BigDecimalType: binding '386.03999999999996' to parameter: 26
 TRACE org.hibernate.type.BigDecimalType: binding '386.03999999999996' to parameter: 27
 TRACE org.hibernate.type.StringType: binding '1000000' to parameter: 28
 TRACE org.hibernate.type.StringType: binding null to parameter: 29
 TRACE org.hibernate.type.StringType: binding null to parameter: 30
 TRACE org.hibernate.type.StringType: binding '220' to parameter: 31
 TRACE org.hibernate.type.StringType: binding 'AK' to parameter: 32
 TRACE org.hibernate.type.StringType: binding null to parameter: 33
 TRACE org.hibernate.type.StringType: binding null to parameter: 34
 TRACE org.hibernate.type.BigDecimalType: binding '19.0' to parameter: 35
 TRACE org.hibernate.type.StringType: binding 'EUR' to parameter: 36
 TRACE org.hibernate.type.StringType: binding '12' to parameter: 37
 TRACE org.hibernate.type.StringType: binding null to parameter: 38
 TRACE org.hibernate.type.TimestampType: binding '2009-07-13 10:24:10' to parameter: 39
 TRACE org.hibernate.type.StringType: binding 'N/A' to parameter: 40
 TRACE org.hibernate.type.DateType: binding '13 Juli 2009' to parameter: 41
 TRACE org.hibernate.type.StringType: binding '10000000' to parameter: 42
First update:
Code:
 DEBUG org.hibernate.SQL: 
    update
        ATCBVersicherungsvertrag 
    set
        CREATED_BY=?,
        txId=?,
        version=?,
        invalidatedAt=?,
        validTo=?,
        bausteinId=?,
        bruttoPraemie=?,
        dokumentenPraemie=?,
        fachlicherSchluessel=?,
        nettoPraemie=?,
        orginalBeginnDatum=?,
        praemieBerechnetBis=?,
        praemienPeriode=?,
        summeNachlaesse=?,
        summeZuschlaege=?,
        versicherungssteuerBetrag=?,
        ablauf=?,
        avbVersion=?,
        bruttoPraemieZW=?,
        buendel_bndNr=?,
        extended=?,
        gesetz=?,
        hauptfaelligkeit=?,
        leistungsEmpf_oapId=?,
        leistungsEmpf_partnerId=?,
        nettoPraemieZW=?,
        nettoTarifPraemie=?,
        oap_oapId=?,
        praemienzahler_oapId=?,
        praemienzahler_partnerId=?,
        sparte=?,
        status=?,
        verlaengerung=?,
        versicherungsAenderung=?,
        versicherungssteuerProzent=?,
        waehrung=?,
        zahlungsPeriode=?,
        zahlweg=? 
    where
        createdAt=? 
        and mandatorId=? 
        and validFrom=? 
        and vtrNr=? 
        and version=?
 TRACE org.hibernate.type.StringType: binding null to parameter: 1
 TRACE org.hibernate.type.StringType: binding '12345' to parameter: 2
 TRACE org.hibernate.type.IntegerType: binding '1' to parameter: 3
 TRACE org.hibernate.type.TimestampType: binding null to parameter: 4
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2999' to parameter: 5
 TRACE org.hibernate.type.StringType: binding 'P_Hausrat_Versicherung::P_Hausrat_Versicherung' to parameter: 6
 TRACE org.hibernate.type.BigDecimalType: binding '459.39' to parameter: 7
 TRACE org.hibernate.type.BigDecimalType: binding '0.0' to parameter: 8
 TRACE org.hibernate.type.StringType: binding '0' to parameter: 9
 TRACE org.hibernate.type.BigDecimalType: binding '386.03999999999996' to parameter: 10
 TRACE org.hibernate.type.DateType: binding '01 Januar 2009' to parameter: 11
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2009' to parameter: 12
 TRACE org.hibernate.type.StringType: binding '12' to parameter: 13
 TRACE org.hibernate.type.BigDecimalType: binding '0.0' to parameter: 14
 TRACE org.hibernate.type.BigDecimalType: binding '0.0' to parameter: 15
 TRACE org.hibernate.type.BigDecimalType: binding '73.35000000000001' to parameter: 16
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2011' to parameter: 17
 TRACE org.hibernate.type.StringType: binding 'ohne' to parameter: 18
 TRACE org.hibernate.type.BigDecimalType: binding '459.39' to parameter: 19
 TRACE org.hibernate.type.StringType: binding null to parameter: 20
 TRACE org.hibernate.type.BooleanType: binding 'false' to parameter: 21
 TRACE org.hibernate.type.StringType: binding null to parameter: 22
 TRACE org.hibernate.type.StringType: binding '01.01.' to parameter: 23
 TRACE org.hibernate.type.StringType: binding null to parameter: 24
 TRACE org.hibernate.type.StringType: binding null to parameter: 25
 TRACE org.hibernate.type.BigDecimalType: binding '386.03999999999996' to parameter: 26
 TRACE org.hibernate.type.BigDecimalType: binding '386.03999999999996' to parameter: 27
 TRACE org.hibernate.type.StringType: binding '1000000' to parameter: 28
 TRACE org.hibernate.type.StringType: binding '1000000' to parameter: 29
 TRACE org.hibernate.type.StringType: binding '3' to parameter: 30
 TRACE org.hibernate.type.StringType: binding '220' to parameter: 31
 TRACE org.hibernate.type.StringType: binding 'AK' to parameter: 32
 TRACE org.hibernate.type.StringType: binding null to parameter: 33
 TRACE org.hibernate.type.StringType: binding null to parameter: 34
 TRACE org.hibernate.type.BigDecimalType: binding '19.0' to parameter: 35
 TRACE org.hibernate.type.StringType: binding 'EUR' to parameter: 36
 TRACE org.hibernate.type.StringType: binding '12' to parameter: 37
 TRACE org.hibernate.type.StringType: binding null to parameter: 38
 TRACE org.hibernate.type.TimestampType: binding '2009-07-13 10:24:10' to parameter: 39
 TRACE org.hibernate.type.StringType: binding 'N/A' to parameter: 40
 TRACE org.hibernate.type.DateType: binding '13 Juli 2009' to parameter: 41
 TRACE org.hibernate.type.StringType: binding '10000000' to parameter: 42
 TRACE org.hibernate.type.IntegerType: binding '0' to parameter: 43
 Second update (which fails):
Code:
 DEBUG org.hibernate.SQL: 
    update
        ATCBVersicherungsvertrag 
    set
        CREATED_BY=?,
        txId=?,
        version=?,
        invalidatedAt=?,
        validTo=?,
        bausteinId=?,
        bruttoPraemie=?,
        dokumentenPraemie=?,
        fachlicherSchluessel=?,
        nettoPraemie=?,
        orginalBeginnDatum=?,
        praemieBerechnetBis=?,
        praemienPeriode=?,
        summeNachlaesse=?,
        summeZuschlaege=?,
        versicherungssteuerBetrag=?,
        ablauf=?,
        avbVersion=?,
        bruttoPraemieZW=?,
        buendel_bndNr=?,
        extended=?,
        gesetz=?,
        hauptfaelligkeit=?,
        leistungsEmpf_oapId=?,
        leistungsEmpf_partnerId=?,
        nettoPraemieZW=?,
        nettoTarifPraemie=?,
        oap_oapId=?,
        praemienzahler_oapId=?,
        praemienzahler_partnerId=?,
        sparte=?,
        status=?,
        verlaengerung=?,
        versicherungsAenderung=?,
        versicherungssteuerProzent=?,
        waehrung=?,
        zahlungsPeriode=?,
        zahlweg=? 
    where
        createdAt=? 
        and mandatorId=? 
        and validFrom=? 
        and vtrNr=? 
        and version=?
TRACE org.hibernate.type.StringType: binding null to parameter: 1
 TRACE org.hibernate.type.StringType: binding '12345' to parameter: 2
 TRACE org.hibernate.type.IntegerType: binding '1' to parameter: 3
 TRACE org.hibernate.type.TimestampType: binding null to parameter: 4
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2999' to parameter: 5
 TRACE org.hibernate.type.StringType: binding 'P_Hausrat_Versicherung::P_Hausrat_Versicherung' to parameter: 6
 TRACE org.hibernate.type.BigDecimalType: binding '459.39' to parameter: 7
 TRACE org.hibernate.type.BigDecimalType: binding '0.00' to parameter: 8
 TRACE org.hibernate.type.StringType: binding '0' to parameter: 9
 TRACE org.hibernate.type.BigDecimalType: binding '386.04' to parameter: 10
 TRACE org.hibernate.type.DateType: binding '01 Januar 2009' to parameter: 11
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2009' to parameter: 12
 TRACE org.hibernate.type.StringType: binding '12' to parameter: 13
 TRACE org.hibernate.type.BigDecimalType: binding '0.00' to parameter: 14
 TRACE org.hibernate.type.BigDecimalType: binding '0.00' to parameter: 15
 TRACE org.hibernate.type.BigDecimalType: binding '73.35' to parameter: 16
 TRACE org.hibernate.type.DateType: binding '31 Dezember 2011' to parameter: 17
 TRACE org.hibernate.type.StringType: binding 'ohne' to parameter: 18
 TRACE org.hibernate.type.BigDecimalType: binding '459.39' to parameter: 19
 TRACE org.hibernate.type.StringType: binding '10000000' to parameter: 20
 TRACE org.hibernate.type.BooleanType: binding 'false' to parameter: 21
 TRACE org.hibernate.type.StringType: binding null to parameter: 22
 TRACE org.hibernate.type.StringType: binding '01.01.' to parameter: 23
 TRACE org.hibernate.type.StringType: binding null to parameter: 24
 TRACE org.hibernate.type.StringType: binding null to parameter: 25
 TRACE org.hibernate.type.BigDecimalType: binding '386.04' to parameter: 26
 TRACE org.hibernate.type.BigDecimalType: binding '386.04' to parameter: 27
 TRACE org.hibernate.type.StringType: binding '1000000' to parameter: 28
 TRACE org.hibernate.type.StringType: binding null to parameter: 29
 TRACE org.hibernate.type.StringType: binding null to parameter: 30
 TRACE org.hibernate.type.StringType: binding '220' to parameter: 31
 TRACE org.hibernate.type.StringType: binding 'AK' to parameter: 32
 TRACE org.hibernate.type.StringType: binding null to parameter: 33
 TRACE org.hibernate.type.StringType: binding null to parameter: 34
 TRACE org.hibernate.type.BigDecimalType: binding '19.00' to parameter: 35
 TRACE org.hibernate.type.StringType: binding 'EUR' to parameter: 36
 TRACE org.hibernate.type.StringType: binding '12' to parameter: 37
 TRACE org.hibernate.type.StringType: binding null to parameter: 38
 TRACE org.hibernate.type.TimestampType: binding '2009-07-13 10:24:10' to parameter: 39
 TRACE org.hibernate.type.StringType: binding 'N/A' to parameter: 40
 TRACE org.hibernate.type.DateType: binding '13 Juli 2009' to parameter: 41
 TRACE org.hibernate.type.StringType: binding '10000000' to parameter: 42
 TRACE org.hibernate.type.IntegerType: binding '0' to parameter: 43
 ERROR org.hibernate.event.def.AbstractFlushingEventListener: Could not synchronize database state with session
 org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [de.corag.contract.persistence.base.internal.VersicherungsvertragActive#VersicherungsvertragActivePKey [vtrNr=10000000, mandatorId=N/A, validFrom=2009-07-13, createdAt=2009-07-13 10:24:10.0]]
   at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1769)
   at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2412)
   at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2312)
   at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2612)
   at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:96)
   at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
   at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
   at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
   at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
   at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
   at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
   at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
   at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
...
Caused by: javax.persistence.RollbackException: Error while commiting the transaction
   at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)
..
Caused by: javax.persistence.OptimisticLockException: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [de.corag.contract.persistence.base.internal.VersicherungsvertragActive#VersicherungsvertragActivePKey [vtrNr=10000000, mandatorId=N/A, validFrom=2009-07-13, createdAt=2009-07-13 10:24:10.0]]
   at org.hibernate.ejb.AbstractEntityManagerImpl.wrapStaleStateException(AbstractEntityManagerImpl.java:653)
   at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:59)
   ... 36 more
Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [de.corag.contract.persistence.base.internal.VersicherungsvertragActive#VersicherungsvertragActivePKey [vtrNr=10000000, mandatorId=N/A, validFrom=2009-07-13, createdAt=2009-07-13 10:24:10.0]]
   at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1769)
   at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2412)
   at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2312)
   at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2612)
   at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:96)
...