He team! We got stuck with the following issue: StaleObjectStateException arises during the update execution into the SINGLE transaction.
Feel free to look and clone the minimal example from bitbucket:
WIKI with examples are also attached there.
Steps to reproduce:
Entity class with fields: 1) of type java.util.Date annotated by @Version e.g lastUpdateDate
2) of type java.util.String for state
3) of type Long (for Id)
Create entity having any state.
Then in the other transaction execute the following steps:
find the created entity with entityManager.find
update the field state (of type String)
execute another one select from database using entityManager. It doesn't matter what it will return. It could even return nothing. In the provided code I deliberately use keys which not exist in DB
update the entity again with different value.
When the transaction is being committed it will fail with the following error
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
It should be said that the mentioned behavior is not reproduced with the version field of type short, only with java.util.Date