[hibernate-dev] JPA2 locking followup...

Scott Marlow smarlow at redhat.com
Thu Nov 12 08:56:51 EST 2009

More JPA-2 locking support is checked in for HHH-4546.  As per Steve's 
suggestion, we can now customize dialects to control how core locking 
(optimistic +pessimistic) is performed against different database servers.

We now have the following additional Hibernate LockModes that are used 
for JPA-2 locking:

OPTIMISTIC - Verify that version hasn't changed just prior to 
transaction commit.

OPTIMISTIC_FORCE_INCREMENT - Verify that version hasn't changed and 
increment version.  Performed just prior to transaction commit.

PESSIMISTIC_READ - Immediately obtain a read (or greater) entity 
database lock.

PESSIMISTIC_WRITE - Immediately obtain a write entity database lock.

PESSIMISTIC_FORCE_INCREMENT - Immediately obtain a write entity database 
lock and increment the version.

I propose that we make the following database dialect changes for the above:

1.  For Oracle, I believe that "select for update" is now getting a 
shared database lock.  I propose that we tailor the Oracle dialect to do 
a "select for update" for LockMode.PESSIMISTIC_READ.  The Oracle dialect 
should also handle LockMode.PESSIMISTIC_WRITE by using the above 
described behavior for LockMode.PESSIMISTIC_FORCE_INCREMENT (JPA-2 spec 
allows this).

2.  For SQL Server dialect, we could use "holdlock, rowlock" for 
LockMode.PESSIMISTIC_READ and "updlock, rowlock" for 
LockMode.PESSIMISTIC_WRITE.  There are probably other variations to 
consider (e.g. Snapshot Isolation mode).

Perhaps we will get some community help in customizing the dialects.  :-)


On 11/06/2009 09:04 AM, Scott Marlow wrote:
> Initial support for locking is checked in via HHH-4546.

More information about the hibernate-dev mailing list