Optimistic Locking in Hibernate by default

lordofthejars picture lordofthejars · Apr 12, 2012 · Viewed 19.7k times · Source

I have one question about optimistic locking in Hibernate. I am trying to go deep inside optimistic locking with Hibernate, but I have one doubt. Hibernate uses version approach (integer or timestamp) to implement optimistic locking. To configure you can use @Version annotation (or xml configuration) and create a version attribute. The other option is configuring without versioning using optimistic-lock="all" attribute.

My question is in case that you don not define any versioning attribute and also you do not specify an optimistic-lock attribute, which strategy uses Hibernate in this cases? Pessimistc Locking I am pretty sure that no, so I suppose that is optimistic locking but don't know how.

Thank you very much for your attention.

Answer

axtavt picture axtavt · Apr 12, 2012

If you don't configure Hibernate to use optimistic locking, it uses no locking at all. So, in this case last update always wins.

Just to make it clear, note that Hibernate optimistic locking is completely different from DBMS transaction isolation. Hibernate optimistic locking only works in situation when you load object in one transaction, modify it and save it later in another transaction. In this case optimistic locking ensures that some other transaction haven't changed that object in the database in between. However, optimistic locking doesn't affect isolation of concurrent transactions - so, locks (optimistic or pessimistic) used by DBMS internally to implement transaction isolation still works, no matter whether Hibernate locking is enabled or not.