How to change Hibernate´s auto persistance strategy
- by Kristofer Borgstrom
I just noted that my hibernate entities are automatically persisted to the database (or at least to cache) before I call any save() or update() method. To me this is a pretty strange default behavior but ok, as long as I can disable it, it´s fine.
The problem I have is I want to update my entity´s state (from 1 to 2) only if the entity in the database still has the state it had when I retrieved [1] (this is to eliminate concurrency issues when another server is updating this same object). For this reason I have created a custom NamedQuery that will only update the entity if state is 1. So here is some pseudo-code:
//Get the entity
Entity item = dao.getEntity();
item.getState(); //==1
//Update the entity
item.setState(2); //Here is the problem, this effectively changes the state of my entity braking my query that verifies that state is still == 1.
dao.customUpdate(item); //Returns 0 rows changes since state != 1.
So, how do I make sure the setters don´t change the state in cache/db?
Thanks,
Kristofer