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*+: [https://bitbucket.org/gegunov/hibernate_issue /src/master/ |https://bitbucket.org/gegunov/hibernate_issue/src/master/] *WIKI* with examples are also attached there.
Steps to reproduce:
*prerequisites*:
* Table DDL {code:java}CREATE TABLE `payment` ( `id` int(11) NOT NULL AUTO_INCREMENT, `status` varchar(45) DEFAULT NULL, `last_update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1{code}
* 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* |
|