org.eclipse.persistence.mappings
Class CollectionMapping

java.lang.Object
  extended by org.eclipse.persistence.mappings.DatabaseMapping
      extended by org.eclipse.persistence.mappings.ForeignReferenceMapping
          extended by org.eclipse.persistence.mappings.CollectionMapping
All Implemented Interfaces:
Serializable, Cloneable, ContainerMapping
Direct Known Subclasses:
AggregateCollectionMapping, DirectCollectionMapping, EISOneToManyMapping, ManyToManyMapping, NestedTableMapping, OneToManyMapping

public abstract class CollectionMapping
extends ForeignReferenceMapping
implements ContainerMapping

Purpose: Abstract class for relationship mappings which store collection of objects

Since:
TOPLink/Java 1.0
Author:
Sati
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class org.eclipse.persistence.mappings.DatabaseMapping
DatabaseMapping.WriteType
 
Field Summary
 
Fields inherited from class org.eclipse.persistence.mappings.ForeignReferenceMapping
INNER_JOIN, NONE, OUTER_JOIN, QUERY_BATCH_PARAMETER
 
Constructor Summary
CollectionMapping()
          PUBLIC: Default constructor.
 
Method Summary
 void addAggregateOrderBy(String aggregateName, String queryKeyName, boolean isDescending)
          PUBLIC: Provide order support for queryKeyName in ascending or descending order.
 void addAscendingOrdering(String queryKeyName)
          PUBLIC: Provide order support for queryKeyName in ascending order
 void addDescendingOrdering(String queryKeyName)
          PUBLIC: Provide order support for queryKeyName in descending order.
 void addOrderBy(String queryKeyName, boolean isDescending)
          PUBLIC: Provide order support for queryKeyName in descending or ascending order.
 Object buildBackupCloneForPartObject(Object attributeValue, Object clone, Object backup, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork)
          INTERNAL: Used during building the backup shallow copy to copy the vector without re-registering the target objects.
 org.eclipse.persistence.internal.sessions.ChangeRecord buildChangeRecord(Object clone, org.eclipse.persistence.internal.sessions.ObjectChangeSet owner, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: Directly build a change record without comparison
 Object buildCloneForPartObject(Object attributeValue, Object original, Object clone, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, boolean isExisting)
          INTERNAL: Require for cloning, the part must be cloned.
 void buildCopy(Object copy, Object original, CopyGroup group)
          INTERNAL: Copy of the attribute of the object.
 Object buildElementClone(Object element, Object parent, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, boolean isExisting)
          INTERNAL: Clone the element, if necessary.
 Object[] buildReferencesPKList(Object entity, Object attribute, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: This method will access the target relationship and create a list of information to rebuild the relationship.
 void calculateDeferredChanges(org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: Used by AttributeLevelChangeTracking to update a changeRecord with calculated changes as apposed to detected changes.
 void cascadeDiscoverAndPersistUnregisteredNewObjects(Object object, Map newObjects, Map unregisteredExistingObjects, Map visitedObjects, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
          INTERNAL: Cascade discover and persist new objects during commit.
 void cascadeMerge(Object sourceElement, org.eclipse.persistence.internal.sessions.MergeManager mergeManager)
          INTERNAL: Cascade the merge to the component object, if appropriate.
 void cascadePerformRemoveIfRequired(Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, Map visitedObjects)
          INTERNAL: Cascade perform delete through mappings that require the cascade
 void cascadePerformRemovePrivateOwnedObjectFromChangeSetIfRequired(Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, Map visitedObjects)
          INTERNAL: Cascade perform removal of orphaned private owned objects from the UnitOfWorkChangeSet
 void cascadeRegisterNewIfRequired(Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow, Map visitedObjects)
          INTERNAL: Cascade registerNew for Create through mappings that require the cascade
 Object clone()
          INTERNAL: The mapping clones itself to create deep copy.
 void compareCollectionsForChange(Object oldCollection, Object newCollection, org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: This method is used to calculate the differences between two collections.
 org.eclipse.persistence.internal.sessions.ChangeRecord compareForChange(Object clone, Object backUp, org.eclipse.persistence.internal.sessions.ObjectChangeSet owner, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: This method is used to create a change record from comparing two collections.
 boolean compareObjects(Object firstObject, Object secondObject, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: Compare the attributes belonging to this mapping for the objects.
 void convertClassNamesToClasses(ClassLoader classLoader)
          INTERNAL: Convert all the class-name-based settings in this mapping to actual class-based settings This method is implemented by subclasses as necessary.
 Object extractResultFromBatchQuery(ReadQuery batchQuery, org.eclipse.persistence.internal.sessions.AbstractRecord sourceRow, org.eclipse.persistence.internal.sessions.AbstractSession session, ObjectLevelReadQuery originalQuery)
          INTERNAL: Extract the value from the batch optimized query, this should be supported by most query types.
 void fixRealObjectReferences(Object object, Map objectDescriptors, Map processedObjects, ObjectLevelReadQuery query, RemoteSession session)
          INTERNAL: We are not using a remote valueholder so we need to replace the reference object(s) with the corresponding object(s) from the remote session.
 org.eclipse.persistence.internal.queries.ContainerPolicy getContainerPolicy()
          INTERNAL: Returns the receiver's containerPolicy.
 Expression getJoinCriteria(org.eclipse.persistence.internal.expressions.QueryKeyExpression exp)
          INTERNAL: Returns the join criteria stored in the mapping selection query.
 org.eclipse.persistence.internal.helper.DatabaseField getListOrderField()
          PUBLIC: Field holds the order of elements in the list in the db, requires collection of type List; may be not null only in case isListOrderFieldSupported==true.
 Object getObjectCorrespondingTo(Object object, RemoteSession session, Map objectDescriptors, Map processedObjects, ObjectLevelReadQuery query)
          INTERNAL: return the object on the client corresponding to the specified object.
 List<Expression> getOrderByQueryKeyExpressions()
          INTERNAL: Return the ordering query keys.
 OrderCorrectionType getOrderCorrectionType()
          PUBLIC: Specifies what should be done if the list of values read from listOrserField is invalid (there should be no nulls, no duplicates, no "holes").
 Object getRealCollectionAttributeValueFromObject(Object object, org.eclipse.persistence.internal.sessions.AbstractSession session)
          Convenience method.
 List<org.eclipse.persistence.internal.helper.DatabaseField> getTargetPrimaryKeyFields()
          INTERNAL: Returns list of primary key fields from the reference descriptor.
 boolean hasOrderBy()
          INTERNAL: Return true if ascending or descending ordering has been set on this mapping via the @OrderBy annotation.
 void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: Initialize the state of mapping.
 boolean isAttributeValueInstantiatedOrChanged(Object object)
          INTERNAL: The referenced object is checked if it is instantiated or not, also check if it has been changed (as indirect collections avoid instantiation on add/remove.
 boolean isChangeTrackingSupported(Project project)
          INTERNAL: Return if this mapping supports change tracking.
 boolean isCollectionMapping()
          INTERNAL: Return whether this mapping is a Collection type.
 boolean isListOrderFieldSupported()
          PUBLIC: indicates whether the mapping supports listOrderField, if it doesn't attempt to set listOrderField throws exception.
 boolean isMapKeyObjectRelationship()
          INTERNAL: Return if this mapping has a mapped key that uses a OneToOne (object).
 void iterateOnElement(org.eclipse.persistence.internal.descriptors.DescriptorIterator iterator, Object element)
          INTERNAL: Iterate on the specified element.
 void iterateOnRealAttributeValue(org.eclipse.persistence.internal.descriptors.DescriptorIterator iterator, Object realAttributeValue)
          INTERNAL: Iterate on the attribute value.
 void mergeChangesIntoObject(Object target, org.eclipse.persistence.internal.sessions.ChangeRecord chgRecord, Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager)
          INTERNAL: Merge changes from the source to the target object.
 void mergeIntoObject(Object target, boolean isTargetUnInitialized, Object source, org.eclipse.persistence.internal.sessions.MergeManager mergeManager)
          INTERNAL: Merge changes from the source to the target object.
 void postCalculateChanges(ChangeRecord changeRecord, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
          INTERNAL: Overridden by mappings that require additional processing of the change record after the record has been calculated.
 void postDelete(DeleteObjectQuery query)
          INTERNAL: A subclass should implement this method if it wants different behavior.
 void postInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: Ensure the container policy is post initialized
 void postInsert(WriteObjectQuery query)
          INTERNAL: A subclass should implement this method if it wants different behavior.
 void preInsert(WriteObjectQuery query)
          INTERNAL: Propagate preInsert event to container policy if necessary
 void preUpdate(WriteObjectQuery query)
          INTERNAL: Propagate preUpdate event to container policy if necessary
 void recordPrivateOwnedRemovals(Object object, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
          INTERNAL: Overridden by mappings that require additional processing of the change record after the record has been calculated.
 Map replaceValueHoldersIn(Object object, org.eclipse.persistence.internal.sessions.remote.RemoteSessionController controller)
          INTERNAL: replace the value holders in the specified reference object(s)
 void setChangeListener(Object clone, PropertyChangeListener listener, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
          INTERNAL: Set the change listener in the collection.
 void setContainerPolicy(org.eclipse.persistence.internal.queries.ContainerPolicy containerPolicy)
          ADVANCED: Configure the mapping to use a container policy.
 void setCustomDeleteAllQuery(ModifyQuery query)
          PUBLIC: The default delete all query for mapping can be overridden by specifying the new query.
 void setDeleteAllCall(Call call)
          PUBLIC: Set the receiver's delete all call.
 void setDeleteAllSQLString(String sqlString)
          PUBLIC: Set the receiver's delete all SQL string.
 void setListOrderField(org.eclipse.persistence.internal.helper.DatabaseField field)
          PUBLIC: Field holds the order of elements in the list in the db, requires collection of type List.
 void setListOrderFieldName(String fieldName)
          PUBLIC: Field holds the order of elements in the list in the db, requires collection of type List.
 void setOrderCorrectionType(OrderCorrectionType orderCorrectionType)
          PUBLIC: Specifies what should be done if the list of values read from listOrserField is invalid (there should be no nulls, no duplicates, no "holes").
 void setSessionName(String name)
          PUBLIC: Set the name of the session to execute the mapping's queries under.
 boolean shouldUseListOrderFieldTableExpression()
          INTERNAL: Indicates whether getListOrderFieldExpression method should create field expression based on table expression.
 void simpleAddToCollectionChangeRecord(Object referenceKey, Object changeSetToAdd, org.eclipse.persistence.internal.sessions.ObjectChangeSet changeSet, org.eclipse.persistence.internal.sessions.AbstractSession session)
          ADVANCED: This method is used to have an object add to a collection once the changeSet is applied The referenceKey parameter should only be used for direct Maps.
 void simpleRemoveFromCollectionChangeRecord(Object referenceKey, Object changeSetToRemove, org.eclipse.persistence.internal.sessions.ObjectChangeSet changeSet, org.eclipse.persistence.internal.sessions.AbstractSession session)
          ADVANCED: This method is used to have an object removed from a collection once the changeSet is applied The referenceKey parameter should only be used for direct Maps.
 void updateChangeRecord(Object clone, Object newValue, Object oldValue, org.eclipse.persistence.internal.sessions.ObjectChangeSet objectChangeSet, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
          INTERNAL: Either create a new change record or update with the new value.
 void updateCollectionChangeRecord(CollectionChangeEvent event, org.eclipse.persistence.internal.sessions.ObjectChangeSet changeSet, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
          INTERNAL: Add or removes a new value and its change set to the collection change record based on the event passed in.
 void useCollectionClass(Class concreteClass)
          PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects.
 void useCollectionClassName(String concreteClassName)
          INTERNAL: Not sure were this is used, MW?
 void useListClassName(String concreteClassName)
          INTERNAL: Not sure were this is used, MW?
 void useMapClass(Class concreteClass)
          PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects.
 void useMapClass(Class concreteClass, String keyName)
          PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects.
 void useMapClassName(String concreteClassName, String methodName)
          INTERNAL: Not sure were this is used, MW?
 void useSortedSetClass(Class concreteClass, Comparator comparator)
          PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects.
 void useSortedSetClassName(String className)
          INTERNAL: Configure the mapping to use an instance of the specified container class name to hold the target objects.
 void useSortedSetClassName(String className, String comparatorClassName)
          INTERNAL: Configure the mapping to use an instance of the specified container class name to hold the target objects.
 void useTransparentCollection()
          PUBLIC: If transparent indirection is used, a special collection will be placed in the source object's attribute.
 void useTransparentList()
          PUBLIC: If transparent indirection is used, a special collection will be placed in the source object's attribute.
 void useTransparentMap(String methodName)
          PUBLIC: If transparent indirection is used, a special map will be placed in the source object's attribute.
 void useTransparentSet()
          PUBLIC: If transparent indirection is used, a special collection will be placed in the source object's attribute.
 void validateBeforeInitialization(org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: To validate mappings declaration
 Object valueFromPKList(Object[] pks, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: This method is used to load a relationship from a list of PKs.
 boolean verifyDelete(Object object, org.eclipse.persistence.internal.sessions.AbstractSession session)
          INTERNAL: Checks if object is deleted from the database or not.
 
Methods inherited from class org.eclipse.persistence.mappings.ForeignReferenceMapping
buildBackupClone, buildClone, buildCloneFromRow, createUnitOfWorkValueHolder, dontUseBatchReading, dontUseIndirection, extendPessimisticLockScopeInSourceQuery, fixObjectReferences, getAttributeValueFromObject, getAttributeValueWithClonedValueHolders, getBatchFetchType, getIndirectionPolicy, getJoinFetch, getRealAttributeValueFromAttribute, getReferenceClass, getReferenceClassName, getReferenceDescriptor, getRelationshipPartner, getRelationshipPartnerAttributeName, getSelectionCriteria, getSelectionQuery, getValueFromRemoteValueHolder, hasCustomSelectionQuery, instantiateAttribute, isAttributeValueInstantiated, isCascadeDetach, isCascadeMerge, isCascadePersist, isCascadeRefresh, isCascadeRemove, isForeignReferenceMapping, isInnerJoinFetched, isJoinFetched, isJoiningSupported, isLazy, isLockableMapping, isOuterJoinFetched, isPrivateOwned, iterate, mergeRemoteValueHolder, preInitialize, prepareNestedBatchQuery, prepareNestedJoins, privateOwnedRelationship, remoteInitialization, requiresTransientWeavedFields, setBatchFetchType, setCascadeAll, setCascadeDetach, setCascadeMerge, setCascadePersist, setCascadeRefresh, setCascadeRemove, setCustomSelectionQuery, setForceInitializationOfSelectionCriteria, setIndirectionPolicy, setIsPrivateOwned, setJoinFetch, setRealAttributeValueInObject, setReferenceClass, setReferenceClassName, setRelationshipPartner, setRelationshipPartnerAttributeName, setRequiresTransientWeavedFields, setSelectionCall, setSelectionCriteria, setSelectionSQLString, setShouldExtendPessimisticLockScope, setUsesBatchReading, setUsesIndirection, shouldExtendPessimisticLockScope, shouldExtendPessimisticLockScopeInDedicatedQuery, shouldExtendPessimisticLockScopeInSourceQuery, shouldExtendPessimisticLockScopeInTargetQuery, shouldMergeCascadeParts, shouldUseBatchReading, trimRowForJoin, trimRowForJoin, useBasicIndirection, useBatchReading, useContainerIndirection, useInnerJoinFetch, useOuterJoinFetch, usesIndirection, useWeavedIndirection, valueFromRow
 
Methods inherited from class org.eclipse.persistence.mappings.DatabaseMapping
buildExpression, buildObjectJoinExpression, buildObjectJoinExpression, buildShallowOriginalFromRow, derivesId, earlyPreDelete, getAttributeAccessor, getAttributeClassification, getAttributeName, getDerivedIdMapping, getDescriptor, getField, getFieldClassification, getFields, getGetMethodName, getMapsIdValue, getProperties, getProperty, getRealAttributeValueFromObject, getSelectFields, getSelectTables, getSetMethodName, getWeight, hasConstraintDependency, hasDependency, hasInverseConstraintDependency, hasMapsIdValue, isAbstractCompositeCollectionMapping, isAbstractCompositeDirectCollectionMapping, isAbstractCompositeObjectMapping, isAbstractDirectMapping, isAggregateCollectionMapping, isAggregateMapping, isAggregateObjectMapping, isCandidateForPrivateOwnedRemoval, isCascadedLockingSupported, isCloningRequired, isDatabaseMapping, isDirectCollectionMapping, isDirectMapMapping, isDirectToFieldMapping, isDirectToXMLTypeMapping, isEISMapping, isJPAId, isManyToManyMapping, isManyToOneMapping, isMapKeyMapping, isNestedTableMapping, isObjectReferenceMapping, isOneToManyMapping, isOneToOneMapping, isOptional, isOwned, isPrimaryKeyMapping, isReadOnly, isReferenceMapping, isRelationalMapping, isStructureMapping, isTransformationMapping, isUnidirectionalOneToManyMapping, isUsingMethodAccess, isVariableOneToOneMapping, isWriteOnly, isXMLMapping, performDataModificationEvent, postCalculateChangesOnDeleted, postUpdate, preDelete, prepareCascadeLockingPolicy, readFromResultSetIntoObject, readFromRowIntoObject, readOnly, readWrite, rehashFieldDependancies, setAttributeAccessor, setAttributeName, setAttributeValueInObject, setDerivedIdMapping, setDerivesId, setDescriptor, setGetMethodName, setIsJPAId, setIsLazy, setIsMapKeyMapping, setIsOptional, setIsPrimaryKeyMapping, setIsReadOnly, setMapsIdValue, setProperties, setProperty, setSetMethodName, setWeight, toString, validateAfterInitialization, valueFromObject, valueFromResultSet, valueFromRow, writeFromAttributeIntoRow, writeFromObjectIntoRow, writeFromObjectIntoRowForShallowInsert, writeFromObjectIntoRowForShallowInsertWithChangeRecord, writeFromObjectIntoRowForUpdate, writeFromObjectIntoRowForWhereClause, writeFromObjectIntoRowWithChangeRecord, writeInsertFieldsIntoRow, writeUpdateFieldsIntoRow
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CollectionMapping

public CollectionMapping()
PUBLIC: Default constructor.

Method Detail

addAscendingOrdering

public void addAscendingOrdering(String queryKeyName)
PUBLIC: Provide order support for queryKeyName in ascending order


addDescendingOrdering

public void addDescendingOrdering(String queryKeyName)
PUBLIC: Provide order support for queryKeyName in descending order.


addOrderBy

public void addOrderBy(String queryKeyName,
                       boolean isDescending)
PUBLIC: Provide order support for queryKeyName in descending or ascending order. Called from the jpa metadata processing of an order by value.


addAggregateOrderBy

public void addAggregateOrderBy(String aggregateName,
                                String queryKeyName,
                                boolean isDescending)
PUBLIC: Provide order support for queryKeyName in ascending or descending order. Called from the jpa metadata processing of an order by value. The aggregate name may be chained through the dot notation.


buildBackupCloneForPartObject

public Object buildBackupCloneForPartObject(Object attributeValue,
                                            Object clone,
                                            Object backup,
                                            org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork)
INTERNAL: Used during building the backup shallow copy to copy the vector without re-registering the target objects.

Specified by:
buildBackupCloneForPartObject in class ForeignReferenceMapping

buildCloneForPartObject

public Object buildCloneForPartObject(Object attributeValue,
                                      Object original,
                                      Object clone,
                                      org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork,
                                      boolean isExisting)
INTERNAL: Require for cloning, the part must be cloned. Ignore the objects, use the attribute value.

Specified by:
buildCloneForPartObject in class ForeignReferenceMapping

buildCopy

public void buildCopy(Object copy,
                      Object original,
                      CopyGroup group)
INTERNAL: Copy of the attribute of the object. This is NOT used for unit of work but for templatizing an object.

Overrides:
buildCopy in class DatabaseMapping

buildElementClone

public Object buildElementClone(Object element,
                                Object parent,
                                org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork,
                                boolean isExisting)
INTERNAL: Clone the element, if necessary.


buildReferencesPKList

public Object[] buildReferencesPKList(Object entity,
                                      Object attribute,
                                      org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This method will access the target relationship and create a list of information to rebuild the relationship. This method is used in combination with the CachedValueHolder to store references to PK's to be loaded from a cache instead of a query.

Specified by:
buildReferencesPKList in class ForeignReferenceMapping

cascadePerformRemoveIfRequired

public void cascadePerformRemoveIfRequired(Object object,
                                           org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow,
                                           Map visitedObjects)
INTERNAL: Cascade perform delete through mappings that require the cascade

Specified by:
cascadePerformRemoveIfRequired in class DatabaseMapping

cascadePerformRemovePrivateOwnedObjectFromChangeSetIfRequired

public void cascadePerformRemovePrivateOwnedObjectFromChangeSetIfRequired(Object object,
                                                                          org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow,
                                                                          Map visitedObjects)
INTERNAL: Cascade perform removal of orphaned private owned objects from the UnitOfWorkChangeSet

Overrides:
cascadePerformRemovePrivateOwnedObjectFromChangeSetIfRequired in class DatabaseMapping

cascadeDiscoverAndPersistUnregisteredNewObjects

public void cascadeDiscoverAndPersistUnregisteredNewObjects(Object object,
                                                            Map newObjects,
                                                            Map unregisteredExistingObjects,
                                                            Map visitedObjects,
                                                            org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Cascade discover and persist new objects during commit.

Overrides:
cascadeDiscoverAndPersistUnregisteredNewObjects in class DatabaseMapping

cascadeRegisterNewIfRequired

public void cascadeRegisterNewIfRequired(Object object,
                                         org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow,
                                         Map visitedObjects)
INTERNAL: Cascade registerNew for Create through mappings that require the cascade

Specified by:
cascadeRegisterNewIfRequired in class DatabaseMapping

calculateDeferredChanges

public void calculateDeferredChanges(org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord,
                                     org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Used by AttributeLevelChangeTracking to update a changeRecord with calculated changes as apposed to detected changes. If an attribute can not be change tracked it's changes can be detected through this process.

Overrides:
calculateDeferredChanges in class DatabaseMapping

cascadeMerge

public void cascadeMerge(Object sourceElement,
                         org.eclipse.persistence.internal.sessions.MergeManager mergeManager)
INTERNAL: Cascade the merge to the component object, if appropriate.

Overrides:
cascadeMerge in class DatabaseMapping

clone

public Object clone()
INTERNAL: The mapping clones itself to create deep copy.

Overrides:
clone in class ForeignReferenceMapping

compareCollectionsForChange

public void compareCollectionsForChange(Object oldCollection,
                                        Object newCollection,
                                        org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord,
                                        org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This method is used to calculate the differences between two collections.


compareForChange

public org.eclipse.persistence.internal.sessions.ChangeRecord compareForChange(Object clone,
                                                                               Object backUp,
                                                                               org.eclipse.persistence.internal.sessions.ObjectChangeSet owner,
                                                                               org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This method is used to create a change record from comparing two collections.

Specified by:
compareForChange in class DatabaseMapping
Returns:
prototype.changeset.ChangeRecord

compareObjects

public boolean compareObjects(Object firstObject,
                              Object secondObject,
                              org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Compare the attributes belonging to this mapping for the objects.

Overrides:
compareObjects in class ForeignReferenceMapping

convertClassNamesToClasses

public void convertClassNamesToClasses(ClassLoader classLoader)
INTERNAL: Convert all the class-name-based settings in this mapping to actual class-based settings This method is implemented by subclasses as necessary.

Overrides:
convertClassNamesToClasses in class ForeignReferenceMapping
Parameters:
classLoader -

extractResultFromBatchQuery

public Object extractResultFromBatchQuery(ReadQuery batchQuery,
                                          org.eclipse.persistence.internal.sessions.AbstractRecord sourceRow,
                                          org.eclipse.persistence.internal.sessions.AbstractSession session,
                                          ObjectLevelReadQuery originalQuery)
                                   throws QueryException
INTERNAL: Extract the value from the batch optimized query, this should be supported by most query types.

Overrides:
extractResultFromBatchQuery in class ForeignReferenceMapping
Throws:
QueryException

fixRealObjectReferences

public void fixRealObjectReferences(Object object,
                                    Map objectDescriptors,
                                    Map processedObjects,
                                    ObjectLevelReadQuery query,
                                    RemoteSession session)
INTERNAL: We are not using a remote valueholder so we need to replace the reference object(s) with the corresponding object(s) from the remote session.

Overrides:
fixRealObjectReferences in class DatabaseMapping

getContainerPolicy

public org.eclipse.persistence.internal.queries.ContainerPolicy getContainerPolicy()
INTERNAL: Returns the receiver's containerPolicy.

Specified by:
getContainerPolicy in interface ContainerMapping
Overrides:
getContainerPolicy in class DatabaseMapping

getJoinCriteria

public Expression getJoinCriteria(org.eclipse.persistence.internal.expressions.QueryKeyExpression exp)
INTERNAL: Returns the join criteria stored in the mapping selection query. This criteria is used to read reference objects across the tables from the database.

Overrides:
getJoinCriteria in class ForeignReferenceMapping

getObjectCorrespondingTo

public Object getObjectCorrespondingTo(Object object,
                                       RemoteSession session,
                                       Map objectDescriptors,
                                       Map processedObjects,
                                       ObjectLevelReadQuery query)
INTERNAL: return the object on the client corresponding to the specified object. CollectionMappings have to worry about maintaining object identity.

Overrides:
getObjectCorrespondingTo in class ForeignReferenceMapping

getOrderByQueryKeyExpressions

public List<Expression> getOrderByQueryKeyExpressions()
INTERNAL: Return the ordering query keys. Used for Workbench integration.


getRealCollectionAttributeValueFromObject

public Object getRealCollectionAttributeValueFromObject(Object object,
                                                        org.eclipse.persistence.internal.sessions.AbstractSession session)
                                                 throws DescriptorException
Convenience method. Return the value of an attribute, unwrapping value holders if necessary. If the value is null, build a new container.

Overrides:
getRealCollectionAttributeValueFromObject in class DatabaseMapping
Throws:
DescriptorException

getListOrderField

public org.eclipse.persistence.internal.helper.DatabaseField getListOrderField()
PUBLIC: Field holds the order of elements in the list in the db, requires collection of type List; may be not null only in case isListOrderFieldSupported==true.


getTargetPrimaryKeyFields

public List<org.eclipse.persistence.internal.helper.DatabaseField> getTargetPrimaryKeyFields()
INTERNAL: Returns list of primary key fields from the reference descriptor.


getOrderCorrectionType

public OrderCorrectionType getOrderCorrectionType()
PUBLIC: Specifies what should be done if the list of values read from listOrserField is invalid (there should be no nulls, no duplicates, no "holes").


hasOrderBy

public boolean hasOrderBy()
INTERNAL: Return true if ascending or descending ordering has been set on this mapping via the @OrderBy annotation.


initialize

public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
                throws DescriptorException
INTERNAL: Initialize the state of mapping.

Overrides:
initialize in class ForeignReferenceMapping
Throws:
DescriptorException

shouldUseListOrderFieldTableExpression

public boolean shouldUseListOrderFieldTableExpression()
INTERNAL: Indicates whether getListOrderFieldExpression method should create field expression based on table expression.


isCollectionMapping

public boolean isCollectionMapping()
INTERNAL: Return whether this mapping is a Collection type.

Overrides:
isCollectionMapping in class DatabaseMapping

isMapKeyObjectRelationship

public boolean isMapKeyObjectRelationship()
INTERNAL: Return if this mapping has a mapped key that uses a OneToOne (object).


isAttributeValueInstantiatedOrChanged

public boolean isAttributeValueInstantiatedOrChanged(Object object)
INTERNAL: The referenced object is checked if it is instantiated or not, also check if it has been changed (as indirect collections avoid instantiation on add/remove.


iterateOnElement

public void iterateOnElement(org.eclipse.persistence.internal.descriptors.DescriptorIterator iterator,
                             Object element)
INTERNAL: Iterate on the specified element.


iterateOnRealAttributeValue

public void iterateOnRealAttributeValue(org.eclipse.persistence.internal.descriptors.DescriptorIterator iterator,
                                        Object realAttributeValue)
INTERNAL: Iterate on the attribute value. The value holder has already been processed.

Specified by:
iterateOnRealAttributeValue in class ForeignReferenceMapping

mergeChangesIntoObject

public void mergeChangesIntoObject(Object target,
                                   org.eclipse.persistence.internal.sessions.ChangeRecord chgRecord,
                                   Object source,
                                   org.eclipse.persistence.internal.sessions.MergeManager mergeManager)
INTERNAL: Merge changes from the source to the target object. Because this is a collection mapping, values are added to or removed from the collection based on the changeset

Specified by:
mergeChangesIntoObject in class DatabaseMapping

mergeIntoObject

public void mergeIntoObject(Object target,
                            boolean isTargetUnInitialized,
                            Object source,
                            org.eclipse.persistence.internal.sessions.MergeManager mergeManager)
INTERNAL: Merge changes from the source to the target object. This merge is only called when a changeSet for the target does not exist or the target is uninitialized

Specified by:
mergeIntoObject in class DatabaseMapping

postCalculateChanges

public void postCalculateChanges(ChangeRecord changeRecord,
                                 org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Overridden by mappings that require additional processing of the change record after the record has been calculated.

Overrides:
postCalculateChanges in class DatabaseMapping

recordPrivateOwnedRemovals

public void recordPrivateOwnedRemovals(Object object,
                                       org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Overridden by mappings that require additional processing of the change record after the record has been calculated.

Overrides:
recordPrivateOwnedRemovals in class DatabaseMapping

postDelete

public void postDelete(DeleteObjectQuery query)
                throws DatabaseException
INTERNAL: A subclass should implement this method if it wants different behavior. Recurse thru the parts to delete the reference objects after the actual object is deleted.

Overrides:
postDelete in class DatabaseMapping
Throws:
DatabaseException

postInitialize

public void postInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Ensure the container policy is post initialized

Overrides:
postInitialize in class DatabaseMapping

postInsert

public void postInsert(WriteObjectQuery query)
                throws DatabaseException
INTERNAL: A subclass should implement this method if it wants different behavior. Recurse thru the parts to delete the reference objects after the actual object is deleted.

Overrides:
postInsert in class DatabaseMapping
Throws:
DatabaseException

preInsert

public void preInsert(WriteObjectQuery query)
               throws DatabaseException,
                      OptimisticLockException
INTERNAL: Propagate preInsert event to container policy if necessary

Overrides:
preInsert in class DatabaseMapping
Throws:
DatabaseException
OptimisticLockException

preUpdate

public void preUpdate(WriteObjectQuery query)
               throws DatabaseException
INTERNAL: Propagate preUpdate event to container policy if necessary

Overrides:
preUpdate in class DatabaseMapping
Throws:
DatabaseException

replaceValueHoldersIn

public Map replaceValueHoldersIn(Object object,
                                 org.eclipse.persistence.internal.sessions.remote.RemoteSessionController controller)
INTERNAL: replace the value holders in the specified reference object(s)

Overrides:
replaceValueHoldersIn in class ForeignReferenceMapping

setContainerPolicy

public void setContainerPolicy(org.eclipse.persistence.internal.queries.ContainerPolicy containerPolicy)
ADVANCED: Configure the mapping to use a container policy. The policy manages the access to the collection.

Specified by:
setContainerPolicy in interface ContainerMapping

setCustomDeleteAllQuery

public void setCustomDeleteAllQuery(ModifyQuery query)
PUBLIC: The default delete all query for mapping can be overridden by specifying the new query. This query is responsible for doing the deletion required by the mapping, such as deletion of all the rows from join table for M-M, or optimized delete all of target objects for 1-M.


setDeleteAllSQLString

public void setDeleteAllSQLString(String sqlString)
PUBLIC: Set the receiver's delete all SQL string. This allows the user to override the SQL generated by TopLink, with there own SQL or procedure call. The arguments are translated from the fields of the source row, through replacing the field names marked by '#' with the values for those fields. This SQL is responsible for doing the deletion required by the mapping, such as deletion of all the rows from join table for M-M, or optimized delete all of target objects for 1-M. Example, 'delete from PROJ_EMP where EMP_ID = #EMP_ID'.


setDeleteAllCall

public void setDeleteAllCall(Call call)
PUBLIC: Set the receiver's delete all call. This allows the user to override the SQL generated by TopLink, with there own SQL or procedure call. The arguments are translated from the fields of the source row. This call is responsible for doing the deletion required by the mapping, such as deletion of all the rows from join table for M-M, or optimized delete all of target objects for 1-M. Example, 'new SQLCall("delete from PROJ_EMP where EMP_ID = #EMP_ID")'.


setSessionName

public void setSessionName(String name)
PUBLIC: Set the name of the session to execute the mapping's queries under. This can be used by the session broker to override the default session to be used for the target class.


simpleAddToCollectionChangeRecord

public void simpleAddToCollectionChangeRecord(Object referenceKey,
                                              Object changeSetToAdd,
                                              org.eclipse.persistence.internal.sessions.ObjectChangeSet changeSet,
                                              org.eclipse.persistence.internal.sessions.AbstractSession session)
ADVANCED: This method is used to have an object add to a collection once the changeSet is applied The referenceKey parameter should only be used for direct Maps.

Overrides:
simpleAddToCollectionChangeRecord in class DatabaseMapping

simpleRemoveFromCollectionChangeRecord

public void simpleRemoveFromCollectionChangeRecord(Object referenceKey,
                                                   Object changeSetToRemove,
                                                   org.eclipse.persistence.internal.sessions.ObjectChangeSet changeSet,
                                                   org.eclipse.persistence.internal.sessions.AbstractSession session)
ADVANCED: This method is used to have an object removed from a collection once the changeSet is applied The referenceKey parameter should only be used for direct Maps.

Overrides:
simpleRemoveFromCollectionChangeRecord in class DatabaseMapping

updateChangeRecord

public void updateChangeRecord(Object clone,
                               Object newValue,
                               Object oldValue,
                               org.eclipse.persistence.internal.sessions.ObjectChangeSet objectChangeSet,
                               org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Either create a new change record or update with the new value. This is used by attribute change tracking. Specifically in a collection mapping this will be called when the customer Set a new collection. In this case we will need to mark the change record with the new and the old versions of the collection. And mark the ObjectChangeSet with the attribute name then when the changes are calculated force a compare on the collections to determine changes.

Overrides:
updateChangeRecord in class DatabaseMapping

updateCollectionChangeRecord

public void updateCollectionChangeRecord(CollectionChangeEvent event,
                                         org.eclipse.persistence.internal.sessions.ObjectChangeSet changeSet,
                                         org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Add or removes a new value and its change set to the collection change record based on the event passed in. This is used by attribute change tracking.

Overrides:
updateCollectionChangeRecord in class DatabaseMapping

setChangeListener

public void setChangeListener(Object clone,
                              PropertyChangeListener listener,
                              org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Set the change listener in the collection. If the collection is not indirect it must be re-built. This is used for resuming or flushing units of work.

Overrides:
setChangeListener in class DatabaseMapping

isListOrderFieldSupported

public boolean isListOrderFieldSupported()
PUBLIC: indicates whether the mapping supports listOrderField, if it doesn't attempt to set listOrderField throws exception.


setListOrderField

public void setListOrderField(org.eclipse.persistence.internal.helper.DatabaseField field)
PUBLIC: Field holds the order of elements in the list in the db, requires collection of type List. Throws exception if the mapping doesn't support listOrderField.


setListOrderFieldName

public void setListOrderFieldName(String fieldName)
PUBLIC: Field holds the order of elements in the list in the db, requires collection of type List. Throws exception if the mapping doesn't support listOrderField.


setOrderCorrectionType

public void setOrderCorrectionType(OrderCorrectionType orderCorrectionType)
PUBLIC: Specifies what should be done if the list of values read from listOrserField is invalid (there should be no nulls, no duplicates, no "holes").


useCollectionClass

public void useCollectionClass(Class concreteClass)
PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects. Note that if listOrderField is used then setListOrderField method should be called before this method.

The container class must implement (directly or indirectly) the java.util.Collection interface.

Specified by:
useCollectionClass in interface ContainerMapping

useSortedSetClass

public void useSortedSetClass(Class concreteClass,
                              Comparator comparator)
PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects.

The container class must implement (directly or indirectly) the java.util.SortedSet interface.


useSortedSetClassName

public void useSortedSetClassName(String className)
INTERNAL: Configure the mapping to use an instance of the specified container class name to hold the target objects. This method is used by MW.

The container class must implement (directly or indirectly) the java.util.SortedSet interface.


useSortedSetClassName

public void useSortedSetClassName(String className,
                                  String comparatorClassName)
INTERNAL: Configure the mapping to use an instance of the specified container class name to hold the target objects. This method is used by MW.

The container class must implement (directly or indirectly) the java.util.SortedSet interface.


useCollectionClassName

public void useCollectionClassName(String concreteClassName)
INTERNAL: Not sure were this is used, MW?


useListClassName

public void useListClassName(String concreteClassName)
INTERNAL: Not sure were this is used, MW?


useMapClass

public void useMapClass(Class concreteClass,
                        String keyName)
PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects. The key used to index a value in the Map is the value returned by a call to the specified zero-argument method. The method must be implemented by the class (or a superclass) of any value to be inserted into the Map.

The container class must implement (directly or indirectly) the java.util.Map interface.

To facilitate resolving the method, the mapping's referenceClass must set before calling this method.

Specified by:
useMapClass in interface ContainerMapping

useMapClass

public void useMapClass(Class concreteClass)
PUBLIC: Configure the mapping to use an instance of the specified container class to hold the target objects. The key used to index a value in the Map is an instance of the composite primary key class.

To facilitate resolving the primary key class, the mapping's referenceClass must set before calling this method.

The container class must implement (directly or indirectly) the java.util.Map interface.


useMapClassName

public void useMapClassName(String concreteClassName,
                            String methodName)
INTERNAL: Not sure were this is used, MW?


useTransparentCollection

public void useTransparentCollection()
PUBLIC: If transparent indirection is used, a special collection will be placed in the source object's attribute. Fetching of the contents of the collection from the database will be delayed until absolutely necessary. (Any message sent to the collection will cause the contents to be faulted in from the database.) This can result in rather significant performance gains, without having to change the source object's attribute from Collection (or List or Vector) to ValueHolderInterface.


useTransparentSet

public void useTransparentSet()
PUBLIC: If transparent indirection is used, a special collection will be placed in the source object's attribute. Fetching of the contents of the collection from the database will be delayed until absolutely necessary. (Any message sent to the collection will cause the contents to be faulted in from the database.) This can result in rather significant performance gains, without having to change the source object's attribute from Set to ValueHolderInterface.


useTransparentList

public void useTransparentList()
PUBLIC: If transparent indirection is used, a special collection will be placed in the source object's attribute. Fetching of the contents of the collection from the database will be delayed until absolutely necessary. (Any message sent to the collection will cause the contents to be faulted in from the database.) This can result in rather significant performance gains, without having to change the source object's attribute from List to ValueHolderInterface.


useTransparentMap

public void useTransparentMap(String methodName)
PUBLIC: If transparent indirection is used, a special map will be placed in the source object's attribute. Fetching of the contents of the map from the database will be delayed until absolutely necessary. (Any message sent to the map will cause the contents to be faulted in from the database.) This can result in rather significant performance gains, without having to change the source object's attribute from Map (or Map or Hashtable) to ValueHolderInterface.

The key used in the Map is the value returned by a call to the zero parameter method named methodName. The method should be a zero argument method implemented (or inherited) by the value to be inserted into the Map.


validateBeforeInitialization

public void validateBeforeInitialization(org.eclipse.persistence.internal.sessions.AbstractSession session)
                                  throws DescriptorException
INTERNAL: To validate mappings declaration

Overrides:
validateBeforeInitialization in class ForeignReferenceMapping
Throws:
DescriptorException

verifyDelete

public boolean verifyDelete(Object object,
                            org.eclipse.persistence.internal.sessions.AbstractSession session)
                     throws DatabaseException
INTERNAL: Checks if object is deleted from the database or not.

Overrides:
verifyDelete in class DatabaseMapping
Throws:
DatabaseException

isChangeTrackingSupported

public boolean isChangeTrackingSupported(Project project)
INTERNAL: Return if this mapping supports change tracking.

Overrides:
isChangeTrackingSupported in class DatabaseMapping

buildChangeRecord

public org.eclipse.persistence.internal.sessions.ChangeRecord buildChangeRecord(Object clone,
                                                                                org.eclipse.persistence.internal.sessions.ObjectChangeSet owner,
                                                                                org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Directly build a change record without comparison

Overrides:
buildChangeRecord in class DatabaseMapping

valueFromPKList

public Object valueFromPKList(Object[] pks,
                              org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This method is used to load a relationship from a list of PKs. This list may be available if the relationship has been cached.

Specified by:
valueFromPKList in class ForeignReferenceMapping