My application has a delete user option. Now in order to check concurrency condition I tried the following use case
- opened application in chrome and firefox browser.
- deleted user in firefox
- now trying to delete the same user in chrome browser I get exception
org.hibernate.StaleObjectStateException.. which is right .. since I am trying to delete an object which doesn’t exists. But I am not able to catch this exception
try{
getHibernateTemplate().delete(userObj);
} catch (StaleObjectStateException e) {
e.printStackTrace();
}
How do i catch this exception ??
You won’t be able to catch it there, because it’s not the delete call that throws the exception, but the flush of the session, which happens later (before the execution of a query, or before the transaction commit).
You should not catch this exception anyway, because when Hibernate throws an exception, you can’t continue using the session anymore: it’s in an unstable state. The only part of the application where such an exception can be caught is outside of the transaction, in order to display an error message to the user (or retry, but this won’t be possible in this particular case).