HHH-6868 Lazily initialize HashMap in LockOptions

This commit is contained in:
Sanne Grinovero 2011-11-30 15:24:41 +00:00
parent eb23512fc5
commit 588a9d69e8
1 changed files with 17 additions and 2 deletions

View File

@ -24,6 +24,7 @@
*/ */
package org.hibernate; package org.hibernate;
import java.io.Serializable; import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
@ -83,7 +84,7 @@ public class LockOptions implements Serializable {
return this; return this;
} }
private Map aliasSpecificLockModes = new HashMap(); private Map aliasSpecificLockModes = null; //initialize lazily as LockOptions is frequently created without needing this
/** /**
* Specify the {@link LockMode} to be used for a specific query alias. * Specify the {@link LockMode} to be used for a specific query alias.
@ -97,6 +98,9 @@ public class LockOptions implements Serializable {
* @see Criteria#setLockMode(String, LockMode) * @see Criteria#setLockMode(String, LockMode)
*/ */
public LockOptions setAliasSpecificLockMode(String alias, LockMode lockMode) { public LockOptions setAliasSpecificLockMode(String alias, LockMode lockMode) {
if ( aliasSpecificLockModes == null ) {
aliasSpecificLockModes = new HashMap();
}
aliasSpecificLockModes.put( alias, lockMode ); aliasSpecificLockModes.put( alias, lockMode );
return this; return this;
} }
@ -113,6 +117,9 @@ public class LockOptions implements Serializable {
* @return The explicit lock mode for that alias. * @return The explicit lock mode for that alias.
*/ */
public LockMode getAliasSpecificLockMode(String alias) { public LockMode getAliasSpecificLockMode(String alias) {
if ( aliasSpecificLockModes == null ) {
return null;
}
return (LockMode) aliasSpecificLockModes.get( alias ); return (LockMode) aliasSpecificLockModes.get( alias );
} }
@ -143,6 +150,9 @@ public class LockOptions implements Serializable {
* @return the number of explicitly defined alias lock modes. * @return the number of explicitly defined alias lock modes.
*/ */
public int getAliasLockCount() { public int getAliasLockCount() {
if ( aliasSpecificLockModes == null ) {
return 0;
}
return aliasSpecificLockModes.size(); return aliasSpecificLockModes.size();
} }
@ -152,6 +162,9 @@ public class LockOptions implements Serializable {
* @return Iterator for accessing the Map.Entry's * @return Iterator for accessing the Map.Entry's
*/ */
public Iterator getAliasLockIterator() { public Iterator getAliasLockIterator() {
if ( aliasSpecificLockModes == null ) {
return Collections.emptyList().iterator();
}
return aliasSpecificLockModes.entrySet().iterator(); return aliasSpecificLockModes.entrySet().iterator();
} }
@ -234,7 +247,9 @@ public class LockOptions implements Serializable {
dest.setLockMode(from.getLockMode()); dest.setLockMode(from.getLockMode());
dest.setScope(from.getScope()); dest.setScope(from.getScope());
dest.setTimeOut(from.getTimeOut()); dest.setTimeOut(from.getTimeOut());
if ( from.aliasSpecificLockModes != null ) {
dest.aliasSpecificLockModes = new HashMap( from.aliasSpecificLockModes ); dest.aliasSpecificLockModes = new HashMap( from.aliasSpecificLockModes );
}
return dest; return dest;
} }
} }