Update of /cvsroot/hibernate/Hibernate3/src/org/hibernate/event/def
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9926/src/org/hibernate/event/def
Modified Files:
AbstractLockUpgradeEventListener.java
Log Message:
HHH-1416 & HHH-1421 : EJB3 LockModeTypes
Index: AbstractLockUpgradeEventListener.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate3/src/org/hibernate/event/def/AbstractLockUpgradeEventListener.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- AbstractLockUpgradeEventListener.java 11 May 2005 22:12:45 -0000 1.4
+++ AbstractLockUpgradeEventListener.java 14 Feb 2006 03:23:55 -0000 1.5
@@ -38,6 +38,8 @@
throws HibernateException {
if ( requestedLockMode.greaterThan( entry.getLockMode() ) ) {
+ // The user requested a "greater" (i.e. more restrictive) form of
+ // pessimistic lock
if ( entry.getStatus() != Status.MANAGED ) {
throw new ObjectDeletedException(
@@ -75,7 +77,15 @@
}
try {
- persister.lock( entry.getId(), entry.getVersion(), object, requestedLockMode, source );
+ if ( persister.isVersioned() && requestedLockMode == LockMode.FORCE ) {
+ Object nextVersion = persister.forceVersionIncrement(
+ entry.getId(), entry.getVersion(), source
+ );
+ entry.forceLocked( object, nextVersion );
+ }
+ else {
+ persister.lock( entry.getId(), entry.getVersion(), object, requestedLockMode, source );
+ }
entry.setLockMode(requestedLockMode);
}
finally {
|