The documentation covers this pretty well. Check out
http://www.hibernate.org/hib_docs/reference/html/transactions.html#transactions-s3
>> does Hibernate guarantee that the data is not stale...
If you use session.disconnect()/reconnect() the data actually has a much higher chance of being stale. Therefore, if you use this approach, you should use session.lock() prior to attempting to update it to ensure that it has not changed.
The easiest plan of action is to utilize one of the versioning techniques outlined in the documentation.