Class SelectedFieldsLockingPolicy
- java.lang.Object
-
- org.eclipse.persistence.descriptors.FieldsLockingPolicy
-
- org.eclipse.persistence.descriptors.SelectedFieldsLockingPolicy
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Cloneable
,org.eclipse.persistence.internal.descriptors.OptimisticLockingPolicy
public class SelectedFieldsLockingPolicy extends FieldsLockingPolicy
Purpose: An implementation of the OptimisticLockingPolicy interface. This policy compares selected fields in the WHERE clause when doing an update or a delete. If any field has been changed, an optimistic locking exception will be thrown. Note that the fields specified must be mapped and not be primary keys.
NOTE: This policy can only be used inside a unit of work.
- See Also:
- Serialized Form
- Since:
- TopLink 2.5
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>
lockFields
protected java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>>
lockFieldsByTable
-
Fields inherited from class org.eclipse.persistence.descriptors.FieldsLockingPolicy
allNonPrimaryKeyFields, descriptor
-
-
Constructor Summary
Constructors Constructor Description SelectedFieldsLockingPolicy()
PUBLIC: Create a new selected fields locking policy.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addLockFieldName(java.lang.String fieldName)
PUBLIC: Add a field name to lock on.void
addLockValuesToTranslationRow(ObjectLevelModifyQuery query)
INTERNAL: Values to be included in the locking mechanism are added to the translation row.protected java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>
getFieldsToCompare(org.eclipse.persistence.internal.helper.DatabaseTable table, org.eclipse.persistence.internal.sessions.AbstractRecord transRow, org.eclipse.persistence.internal.sessions.AbstractRecord modifyRow)
INTERNAL: returns the lock fields to compare based on the passed in table.java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>
getLockFields()
INTERNAL: Returns the lock fieldsprotected java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>
getLockFields(org.eclipse.persistence.internal.helper.DatabaseTable table)
INTERNAL: returns the lock fields based on the passed in tableprotected java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>>
getLockFieldsByTable()
INTERNAL: returns the lock fieldsvoid
initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: It is responsible for initializing the policy;void
setLockFieldNames(java.util.List<java.lang.String> lockFieldNames)
PUBLIC: Set the field names to lock on.protected void
setLockFields(java.util.List<org.eclipse.persistence.internal.helper.DatabaseField> lockFields)
INTERNAL: Sets the lock fieldsprotected void
setLockFieldsByTable(java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>> lockFieldsByTable)
INTERNAL: Used to set the field names to be used in this policy.-
Methods inherited from class org.eclipse.persistence.descriptors.FieldsLockingPolicy
addLockFieldsToUpdateRow, buildAllNonPrimaryKeyFields, buildDeleteExpression, buildExpression, buildUpdateExpression, clone, compareWriteLockValues, getAllNonPrimaryKeyFields, getAllNonPrimaryKeyFields, getBaseValue, getLockOnChangeMode, getValueToPutInCache, getVersionDifference, getWriteLockField, getWriteLockUpdateExpression, getWriteLockValue, initializeProperties, isCascaded, isNewerVersion, isNewerVersion, isPrimaryKey, isStoredInCache, mergeIntoParentCache, mergeIntoParentCache, setAllNonPrimaryKeyFields, setDescriptor, setLockOnChangeMode, setupWriteFieldsForInsert, shouldUpdateVersionOnMappingChange, shouldUpdateVersionOnOwnedMappingChange, supportsWriteLockValuesComparison, updateRowAndObjectForUpdate, validateDelete, validateUpdate, verifyUsage
-
-
-
-
Field Detail
-
lockFieldsByTable
protected java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>> lockFieldsByTable
-
lockFields
protected java.util.List<org.eclipse.persistence.internal.helper.DatabaseField> lockFields
-
-
Constructor Detail
-
SelectedFieldsLockingPolicy
public SelectedFieldsLockingPolicy()
PUBLIC: Create a new selected fields locking policy. A field locking policy is based on locking on the specified fields by comparing with their previous values to detect field-level collisions. Note: the unit of work must be used for all updates when using field locking.
-
-
Method Detail
-
addLockFieldName
public void addLockFieldName(java.lang.String fieldName)
PUBLIC: Add a field name to lock on. All fields in this list will be compared when updating if the value of any of the fields does not match the value in memory, an OptimisticLockException will be thrown. Note: An Automatic update will not be done on this field, only a comparison occurs.
-
addLockValuesToTranslationRow
public void addLockValuesToTranslationRow(ObjectLevelModifyQuery query) throws DatabaseException
INTERNAL: Values to be included in the locking mechanism are added to the translation row. For changed fields the normal build row is ok as only changed fields matter.- Specified by:
addLockValuesToTranslationRow
in interfaceorg.eclipse.persistence.internal.descriptors.OptimisticLockingPolicy
- Specified by:
addLockValuesToTranslationRow
in classFieldsLockingPolicy
- Throws:
DatabaseException
-
getFieldsToCompare
protected java.util.List<org.eclipse.persistence.internal.helper.DatabaseField> getFieldsToCompare(org.eclipse.persistence.internal.helper.DatabaseTable table, org.eclipse.persistence.internal.sessions.AbstractRecord transRow, org.eclipse.persistence.internal.sessions.AbstractRecord modifyRow)
INTERNAL: returns the lock fields to compare based on the passed in table.- Specified by:
getFieldsToCompare
in classFieldsLockingPolicy
-
getLockFields
public java.util.List<org.eclipse.persistence.internal.helper.DatabaseField> getLockFields()
INTERNAL: Returns the lock fields
-
getLockFields
protected java.util.List<org.eclipse.persistence.internal.helper.DatabaseField> getLockFields(org.eclipse.persistence.internal.helper.DatabaseTable table)
INTERNAL: returns the lock fields based on the passed in table
-
getLockFieldsByTable
protected java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>> getLockFieldsByTable()
INTERNAL: returns the lock fields
-
initialize
public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: It is responsible for initializing the policy;- Specified by:
initialize
in interfaceorg.eclipse.persistence.internal.descriptors.OptimisticLockingPolicy
- Overrides:
initialize
in classFieldsLockingPolicy
-
setLockFieldNames
public void setLockFieldNames(java.util.List<java.lang.String> lockFieldNames)
PUBLIC: Set the field names to lock on. All fields in this list will be compared when Updating. If the value of any of the fields does not match the value in memory, an OptimisticLockException will be thrown. Note: An Automatic update will not be done on this field, only a comparison occurs.
-
setLockFields
protected void setLockFields(java.util.List<org.eclipse.persistence.internal.helper.DatabaseField> lockFields)
INTERNAL: Sets the lock fields
-
setLockFieldsByTable
protected void setLockFieldsByTable(java.util.Map<org.eclipse.persistence.internal.helper.DatabaseTable,java.util.List<org.eclipse.persistence.internal.helper.DatabaseField>> lockFieldsByTable)
INTERNAL: Used to set the field names to be used in this policy.
-
-