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)
...