From: <ste...@us...> - 2006-02-14 03:24:04
|
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 { |