Class ForeignReferenceMapping

    • Field Detail

      • QUERY_BATCH_PARAMETER

        public static final String QUERY_BATCH_PARAMETER
        Query parameter name used for IN batch ids.
        See Also:
        Constant Field Values
      • referenceClass

        protected Class referenceClass
        This is used only in descriptor proxy in remote session
      • referenceClassName

        protected String referenceClassName
      • tempInitSession

        protected transient AbstractSession tempInitSession
        The session is temporarily used for initialization. Once used, it is set to null
      • referenceDescriptor

        protected transient ClassDescriptor referenceDescriptor
        The descriptor of the reference class.
      • selectionQuery

        protected ReadQuery selectionQuery
        This query is used to read referenced objects for this mapping.
      • isPrivateOwned

        protected boolean isPrivateOwned
        Indicates whether the referenced object is privately owned or not.
      • batchFetchType

        protected BatchFetchType batchFetchType
        Indicates whether the referenced object should always be batch read on read all queries, and defines the type of batch fetch to use.
      • indirectionPolicy

        protected IndirectionPolicy indirectionPolicy
        Implements indirection behavior
      • hasCustomSelectionQuery

        protected transient boolean hasCustomSelectionQuery
        Indicates whether the selection query is TopLink generated or defined by the user.
      • relationshipPartner

        protected DatabaseMapping relationshipPartner
        Used to reference the other half of a bi-directional relationship.
      • relationshipPartnerAttributeName

        protected String relationshipPartnerAttributeName
        Set by users, used to retrieve the backpointer for this mapping
      • cascadePersist

        protected boolean cascadePersist
        Cascading flags used by the EntityManager
      • cascadeMerge

        protected boolean cascadeMerge
      • cascadeRefresh

        protected boolean cascadeRefresh
      • cascadeRemove

        protected boolean cascadeRemove
      • cascadeDetach

        protected boolean cascadeDetach
      • requiresTransientWeavedFields

        protected boolean requiresTransientWeavedFields
        Flag used to determine if we need to weave the transient annotation on weaved fields.
      • joinFetch

        protected int joinFetch
        Define if the relationship should always be join fetched.
      • INNER_JOIN

        public static final int INNER_JOIN
        Specify any INNER join on a join fetch.
        See Also:
        Constant Field Values
      • OUTER_JOIN

        public static final int OUTER_JOIN
        Specify any OUTER join on a join fetch.
        See Also:
        Constant Field Values
      • NONE

        public static final int NONE
        Specify no join fetch, this is the default.
        See Also:
        Constant Field Values
      • forceInitializationOfSelectionCriteria

        protected boolean forceInitializationOfSelectionCriteria
        This is a way (after cloning) to force the initialization of the selection criteria
      • isCascadeOnDeleteSetOnDatabase

        protected boolean isCascadeOnDeleteSetOnDatabase
        Support delete cascading on the database relationship constraint.
      • partitioningPolicy

        protected PartitioningPolicy partitioningPolicy
        Allow the mapping's queries to be targeted at specific connection pools.
      • partitioningPolicyName

        protected String partitioningPolicyName
        Allow the mapping's queries to be targeted at specific connection pools.
      • mappedBy

        protected String mappedBy
        Stores JPA metadata about whether another mapping is the owning mapping. Only populated for JPA models
    • Constructor Detail

      • ForeignReferenceMapping

        protected ForeignReferenceMapping()
    • Method Detail

      • getMappedBy

        public String getMappedBy()
        ADVANCED: Allows the retrieval of the owning mapping for a particular mapping. Note: This will only be set for JPA models
        Returns:
      • getPartitioningPolicy

        public PartitioningPolicy getPartitioningPolicy()
        PUBLIC: Return the mapping's partitioning policy.
      • setPartitioningPolicy

        public void setPartitioningPolicy​(PartitioningPolicy partitioningPolicy)
        PUBLIC: Set the mapping's partitioning policy. A PartitioningPolicy is used to partition, load-balance or replicate data across multiple difference databases or across a database cluster such as Oracle RAC. Partitioning can provide improved scalability by allowing multiple database machines to service requests. Setting a policy on a mapping will set the policy on all of its mappings.
      • getPartitioningPolicyName

        public String getPartitioningPolicyName()
        PUBLIC: Return the name of the mapping's partitioning policy. A PartitioningPolicy with the same name must be defined on the Project. A PartitioningPolicy is used to partition the data for a class across multiple difference databases or across a database cluster such as Oracle RAC. Partitioning can provide improved scalability by allowing multiple database machines to service requests.
      • setPartitioningPolicyName

        public void setPartitioningPolicyName​(String partitioningPolicyName)
        PUBLIC: Set the name of the mapping's partitioning policy. A PartitioningPolicy with the same name must be defined on the Project. A PartitioningPolicy is used to partition the data for a class across multiple difference databases or across a database cluster such as Oracle RAC. Partitioning can provide improved scalability by allowing multiple database machines to service requests.
      • batchedValueFromRow

        protected Object batchedValueFromRow​(AbstractRecord row,
                                             ObjectLevelReadQuery query,
                                             CacheKey parentCacheKey)
        INTERNAL: Retrieve the value through using batch reading. This executes a single query to read the target for all of the objects and stores the result of the batch query in the original query to allow the other objects to share the results.
      • buildCloneFromRow

        public void buildCloneFromRow​(AbstractRecord databaseRow,
                                      JoinedAttributeManager joinManager,
                                      Object clone,
                                      CacheKey sharedCacheKey,
                                      ObjectBuildingQuery sourceQuery,
                                      UnitOfWorkImpl unitOfWork,
                                      AbstractSession executionSession)
        INTERNAL: A combination of readFromRowIntoObject and buildClone.

        buildClone assumes the attribute value exists on the original and can simply be copied.

        readFromRowIntoObject assumes that one is building an original.

        Both of the above assumptions are false in this method, and actually attempts to do both at the same time.

        Extract value from the row and set the attribute to this value in the working copy clone. In order to bypass the shared cache when in transaction a UnitOfWork must be able to populate working copies directly from the row.

        Specified by:
        buildCloneFromRow in class DatabaseMapping
      • clone

        public Object clone()
        INTERNAL: The mapping clones itself to create deep copy.
        Overrides:
        clone in class DatabaseMapping
      • buildReferencesPKList

        public abstract Object[] buildReferencesPKList​(Object entity,
                                                       Object attribute,
                                                       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.
      • compareObjectsWithoutPrivateOwned

        protected abstract boolean compareObjectsWithoutPrivateOwned​(Object first,
                                                                     Object second,
                                                                     AbstractSession session)
        Compare two objects if their parts are not private owned
      • compareObjectsWithPrivateOwned

        protected abstract boolean compareObjectsWithPrivateOwned​(Object first,
                                                                  Object second,
                                                                  AbstractSession session)
        Compare two objects if their parts are private owned
      • 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 used when converting a project that has been built with class names to a project with classes.
        Overrides:
        convertClassNamesToClasses in class DatabaseMapping
      • dontDoMerge

        protected boolean dontDoMerge​(Object target,
                                      Object source,
                                      MergeManager mergeManager)
        INTERNAL: Return true if the merge should be bypassed. This would be the case for several reasons, depending on the kind of merge taking place.
      • dontUseBatchReading

        public void dontUseBatchReading()
        PUBLIC: Indicates whether the referenced object should always be batch read on read all queries. Batch reading will read all of the related objects in a single query when accessed from an originating read all. This should only be used if it is know that the related objects are always required with the source object, or indirection is not used.
      • dontUseIndirection

        public void dontUseIndirection()
        PUBLIC: Indirection means that a ValueHolder will be put in-between the attribute and the real object. This allows for the reading of the target from the database to be delayed until accessed. This defaults to true and is strongly suggested as it give a huge performance gain.
      • extendPessimisticLockScopeInTargetQuery

        protected void extendPessimisticLockScopeInTargetQuery​(ObjectLevelReadQuery targetQuery,
                                                               ObjectBuildingQuery sourceQuery)
        INTERNAL: Called if shouldExtendPessimisticLockScopeInTargetQuery() is true. Adds locking clause to the target query to extend pessimistic lock scope.
      • extendPessimisticLockScopeInSourceQuery

        public void extendPessimisticLockScopeInSourceQuery​(ObjectLevelReadQuery sourceQuery)
        INTERNAL: Called if shouldExtendPessimisticLockScopeInSourceQuery is true. Adds fields to be locked to the where clause of the source query. Note that the sourceQuery must be ObjectLevelReadQuery so that it has ExpressionBuilder. This method must be implemented in subclasses that allow setting shouldExtendPessimisticLockScopeInSourceQuery to true.
      • extractBatchKeyFromRow

        protected Object extractBatchKeyFromRow​(AbstractRecord targetRow,
                                                AbstractSession session)
        INTERNAL: Extract the batch key value from the source row. Used for batch reading, most following same order and fields as in the mapping. The method should be overridden by classes that support batch reading.
      • collectQueryParameters

        public abstract void collectQueryParameters​(Set<DatabaseField> cacheFields)
        INTERNAL: This method is used to store the FK fields that can be cached that correspond to noncacheable mappings the FK field values will be used to re-issue the query when cloning the shared cache entity
        Overrides:
        collectQueryParameters in class DatabaseMapping
      • checkCacheForBatchKey

        protected Object checkCacheForBatchKey​(AbstractRecord sourceRow,
                                               Object foreignKey,
                                               Map batchObjects,
                                               ReadQuery batchQuery,
                                               ObjectLevelReadQuery originalQuery,
                                               AbstractSession session)
        INTERNAL: Check if the target object is in the cache if possible based on the source row. If in the cache, add the object to the batch results. Return null if not possible or not in the cache.
      • executeBatchQuery

        protected void executeBatchQuery​(DatabaseQuery query,
                                         CacheKey parentCacheKey,
                                         Map referenceObjectsByKey,
                                         AbstractSession session,
                                         AbstractRecord row)
        INTERNAL: Prepare and execute the batch query and store the results for each source object in a map keyed by the mappings source keys of the source objects.
      • postPrepareNestedBatchQuery

        protected void postPrepareNestedBatchQuery​(ReadQuery batchQuery,
                                                   ObjectLevelReadQuery query)
        INTERNAL: Allow the mapping the do any further batch preparation.
      • prepareNestedBatchQuery

        public ReadQuery prepareNestedBatchQuery​(ObjectLevelReadQuery query)
        INTERNAL: Clone and prepare the selection query as a nested batch read query. This is used for nested batch reading.
      • getAttributeValueWithClonedValueHolders

        public Object getAttributeValueWithClonedValueHolders​(Object object)
        INTERNAL: Returns the attribute value from the reference object. If the attribute is using indirection the value of the value-holder is returned. If the value holder is not instantiated then it is instantiated.
      • getFieldsForTranslationInAggregate

        public Collection getFieldsForTranslationInAggregate()
        INTERNAL: Return source key fields for translation by an AggregateObjectMapping By default, return an empty NonSynchronizedVector
      • getExtendPessimisticLockScopeDedicatedQuery

        protected ReadQuery getExtendPessimisticLockScopeDedicatedQuery​(AbstractSession session,
                                                                        short lockMode)
        INTERNAL: Should be overridden by subclass that allows setting extendPessimisticLockScope to DEDICATED_QUERY.
      • getIndirectionPolicy

        public IndirectionPolicy getIndirectionPolicy()
        INTERNAL: Return the mapping's indirection policy.
      • getJoinCriteria

        public Expression getJoinCriteria​(ObjectExpression context,
                                          Expression base)
        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.
      • getRealAttributeValueFromAttribute

        public Object getRealAttributeValueFromAttribute​(Object attributeValue,
                                                         Object object,
                                                         AbstractSession session)
        INTERNAL: Returns the attribute value from the reference object. If the attribute is using indirection the value of the value-holder is returned. If the value holder is not instantiated then it is instantiated.
        Overrides:
        getRealAttributeValueFromAttribute in class DatabaseMapping
      • isLazy

        public boolean isLazy()
        Return if this mapping is lazy. For relationship mappings this should normally be the same value as indirection, however for eager relationships this can be used with indirection to allow indirection locking and change tracking, but still always force instantiation.
        Overrides:
        isLazy in class DatabaseMapping
      • isLockableMapping

        public boolean isLockableMapping()
        INTERNAL: Return whether this mapping should be traversed when we are locking.
        Overrides:
        isLockableMapping in class DatabaseMapping
        Returns:
      • getReferenceClass

        public Class getReferenceClass()
        PUBLIC: Returns the reference class.
      • getReferenceClassName

        public String getReferenceClassName()
        INTERNAL: Returns the reference class name.
      • getRelationshipPartner

        public DatabaseMapping getRelationshipPartner()
        INTERNAL: Return the relationshipPartner mapping for this bi-directional mapping. If the relationshipPartner is null then this is a uni-directional mapping.
        Overrides:
        getRelationshipPartner in class DatabaseMapping
      • getRelationshipPartnerAttributeName

        public String getRelationshipPartnerAttributeName()
        PUBLIC: Use this method retrieve the relationship partner attribute name of this bidirectional Mapping.
      • getSelectionCriteria

        public Expression getSelectionCriteria()
        INTERNAL: Returns the selection criteria stored in the mapping selection query. This criteria is used to read reference objects from the database. It will return null before initialization. To obtain the selection criteria before initialization (e.g., in a customizer) you can use the buildSelectionCriteria() method defined by some subclasses.
        See Also:
        OneToOneMapping.buildSelectionCriteria(), OneToManyMapping.buildSelectionCriteria()
      • getSelectionQuery

        public ReadQuery getSelectionQuery()
        INTERNAL: Returns the read query associated with the mapping.
      • hasCustomSelectionQuery

        public boolean hasCustomSelectionQuery()
        INTERNAL: Indicates whether the selection query is TopLink generated or defined by the user.
      • hasNestedIdentityReference

        public boolean hasNestedIdentityReference()
        INTERNAL: Indicates whether the mapping (or at least one of its nested mappings, at any nested depth) references an entity. To return true the mapping (or nested mapping) should be ForeignReferenceMapping with non-null and non-aggregate reference descriptor.
        Overrides:
        hasNestedIdentityReference in class DatabaseMapping
      • isAttributeValueFullyBuilt

        public boolean isAttributeValueFullyBuilt​(Object object)
        INTERNAL: The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue in cases where it is null and indirection requires that it contain some specific data structure. Return whether this will happen. This method is used to help determine if indirection has been triggered
        Parameters:
        object -
        Returns:
        See Also:
        IndirectionPolicy.validateAttributeOfInstantiatedObject(Object)
      • isAttributeValueInstantiated

        public boolean isAttributeValueInstantiated​(Object object)
        INTERNAL: The referenced object is checked if it is instantiated or not
      • isCascadeDetach

        public boolean isCascadeDetach()
        PUBLIC: Check cascading value for the detach operation.
      • isCascadePersist

        public boolean isCascadePersist()
        PUBLIC: Check cascading value for the CREATE operation.
      • isCascadeMerge

        public boolean isCascadeMerge()
        PUBLIC: Check cascading value for the MERGE operation.
      • isCascadeRefresh

        public boolean isCascadeRefresh()
        PUBLIC: Check cascading value for the REFRESH operation.
      • isCascadeRemove

        public boolean isCascadeRemove()
        PUBLIC: Check cascading value for the REMOVE operation.
      • hasDependency

        public boolean hasDependency()
        INTERNAL: Return if the mapping has any ownership or other dependency over its target object(s).
        Overrides:
        hasDependency in class DatabaseMapping
      • isJoiningSupported

        public boolean isJoiningSupported()
        INTERNAL: Return if this mapping supports joining.
        Overrides:
        isJoiningSupported in class DatabaseMapping
      • isPrivateOwned

        public boolean isPrivateOwned()
        PUBLIC: Return true if referenced objects are privately owned else false.
        Overrides:
        isPrivateOwned in class DatabaseMapping
      • iterate

        public void iterate​(DescriptorIterator iterator)
        INTERNAL: Iterate on the iterator's current object's attribute defined by this mapping. The iterator's settings for cascading and value holders determine how the iteration continues from here.
        Specified by:
        iterate in class DatabaseMapping
      • mergeRemoteValueHolder

        public void mergeRemoteValueHolder​(Object clientSideDomainObject,
                                           Object serverSideDomainObject,
                                           MergeManager mergeManager)
        INTERNAL: Replace the client value holder with the server value holder, after copying some of the settings from the client value holder.
      • privateOwnedRelationship

        public void privateOwnedRelationship()
        PUBLIC: Sets the reference object to be a private owned. The default behavior is non private owned, or independent.
        See Also:
        setIsPrivateOwned(boolean)
      • remoteInitialization

        public void remoteInitialization​(DistributedSession session)
        INTERNAL: Once descriptors are serialized to the remote session. All its mappings and reference descriptors are traversed. Usually mappings are initialized and serialized reference descriptors are replaced with local descriptors if they already exist on the remote session.
        Overrides:
        remoteInitialization in class DatabaseMapping
      • requiresTransientWeavedFields

        public boolean requiresTransientWeavedFields()
        Returns true if this mappings associated weaved field requires a transient setting to avoid metadata processing.
      • setCascadeAll

        public void setCascadeAll​(boolean value)
        PUBLIC: Sets the cascading for all JPA operations.
      • setCascadeDetach

        public void setCascadeDetach​(boolean value)
        PUBLIC: Sets the cascading for the JPA detach operation.
      • setCascadePersist

        public void setCascadePersist​(boolean value)
        PUBLIC: Sets the cascading for the JPA CREATE operation.
      • setCascadeMerge

        public void setCascadeMerge​(boolean value)
        PUBLIC: Sets the cascading for the JPA MERGE operation.
      • setCascadeRefresh

        public void setCascadeRefresh​(boolean value)
        PUBLIC: Sets the cascading for the JPA REFRESH operation.
      • setCascadeRemove

        public void setCascadeRemove​(boolean value)
        PUBLIC: Sets the cascading for the JPA REMOVE operation.
      • setCustomSelectionQuery

        public void setCustomSelectionQuery​(ReadQuery query)
        PUBLIC: Relationship mappings creates a read query to read reference objects. If this default query needs to be customize then user can specify its own read query to do the reading of reference objects. One must instance of ReadQuery or subclasses of the ReadQuery.
      • setHasCustomSelectionQuery

        protected void setHasCustomSelectionQuery​(boolean bool)
      • setForceInitializationOfSelectionCriteria

        public void setForceInitializationOfSelectionCriteria​(boolean bool)
        INTERNAL: A way of forcing the selection criteria to be rebuilt.
      • setIndirectionPolicy

        public void setIndirectionPolicy​(IndirectionPolicy indirectionPolicy)
        ADVANCED: Set the indirection policy.
      • setIsPrivateOwned

        public void setIsPrivateOwned​(boolean isPrivateOwned)
        PUBLIC: Set if the relationship is privately owned. A privately owned relationship means the target object is a dependent part of the source object and is not referenced by any other object and cannot exist on its own. Private ownership causes many operations to be cascaded across the relationship, including, deletion, insertion, refreshing, locking (when cascaded). It also ensures that private objects removed from collections are deleted and object added are inserted.
      • setReferenceClass

        public void setReferenceClass​(Class referenceClass)
        PUBLIC: Set the referenced class.
      • setReferenceClassName

        public void setReferenceClassName​(String referenceClassName)
        INTERNAL: Used by MW.
      • setReferenceDescriptor

        protected void setReferenceDescriptor​(ClassDescriptor aDescriptor)
        Set the referenceDescriptor. This is a descriptor which is associated with the reference class.
      • setRelationshipPartner

        public void setRelationshipPartner​(DatabaseMapping mapping)
        INTERNAL: Sets the relationshipPartner mapping for this bi-directional mapping. If the relationshipPartner is null then this is a uni-directional mapping.
      • setRelationshipPartnerAttributeName

        public void setRelationshipPartnerAttributeName​(String attributeName)
        PUBLIC: Use this method to specify the relationship partner attribute name of a bidirectional Mapping. TopLink will use the attribute name to find the back pointer mapping to maintain referential integrity of the bi-directional mappings.
      • setRequiresTransientWeavedFields

        public void setRequiresTransientWeavedFields​(boolean requiresTransientWeavedFields)
        Set this flag if this mappings associated weaved field requires a transient setting to avoid metadata processing.
      • setSelectionCriteria

        public void setSelectionCriteria​(Expression anExpression)
        PUBLIC: Sets the selection criteria to be used as a where clause to read reference objects. This criteria is automatically generated by the TopLink if not explicitly specified by the user.
      • setSelectionQuery

        protected void setSelectionQuery​(ReadQuery aQuery)
        Sets the query
      • setSelectionSQLString

        public void setSelectionSQLString​(String sqlString)
        PUBLIC: This is a property on the mapping which will allow custom SQL to be substituted for reading a reference object.
      • setSelectionCall

        public void setSelectionCall​(Call call)
        PUBLIC: This is a property on the mapping which will allow custom call to be substituted for reading a reference object.
      • setShouldExtendPessimisticLockScope

        public void setShouldExtendPessimisticLockScope​(boolean shouldExtend)
        ADVANCED: Indicates whether pessimistic lock of ObjectLevelReadQuery with isPessimisticLockScopeExtended set to true should be applied through this mapping beyond the tables mapped to the source object.
      • setTempSession

        protected void setTempSession​(AbstractSession session)
      • setUsesBatchReading

        public void setUsesBatchReading​(boolean usesBatchReading)
        PUBLIC: Indicates whether the referenced object should always be batch read on read all queries. Batch reading will read all of the related objects in a single query when accessed from an originating read all. This should only be used if it is know that the related objects are always required with the source object, or indirection is not used.
        See Also:
        setBatchFetchType(BatchFetchType)
      • setUsesIndirection

        public void setUsesIndirection​(boolean usesIndirection)
        PUBLIC: Indirection means that a ValueHolder will be put in-between the attribute and the real object. This allows for the reading of the target from the database to be delayed until accessed. This defaults to true and is strongly suggested as it give a huge performance gain.
        See Also:
        useBasicIndirection(), dontUseIndirection()
      • shouldExtendPessimisticLockScope

        public boolean shouldExtendPessimisticLockScope()
        INTERNAL: Indicates whether pessimistic lock of ObjectLevelReadQuery with isPessimisticLockScopeExtended set to true should be applied through this mapping beyond the tables mapped to the source object.
      • shouldExtendPessimisticLockScopeInSourceQuery

        public boolean shouldExtendPessimisticLockScopeInSourceQuery()
      • shouldExtendPessimisticLockScopeInTargetQuery

        public boolean shouldExtendPessimisticLockScopeInTargetQuery()
      • shouldExtendPessimisticLockScopeInDedicatedQuery

        public boolean shouldExtendPessimisticLockScopeInDedicatedQuery()
      • shouldForceInitializationOfSelectionCriteria

        protected boolean shouldForceInitializationOfSelectionCriteria()
        INTERNAL:
      • shouldInitializeSelectionCriteria

        protected boolean shouldInitializeSelectionCriteria()
      • shouldMergeCascadeParts

        public boolean shouldMergeCascadeParts​(MergeManager mergeManager)
        INTERNAL: Returns true if the merge should cascade to the mappings reference's parts.
      • shouldRefreshCascadeParts

        public boolean shouldRefreshCascadeParts​(MergeManager mergeManager)
        INTERNAL: Returns true if the merge should cascade to the mappings reference's parts.
      • shouldMergeCascadeReference

        protected boolean shouldMergeCascadeReference​(MergeManager mergeManager)
        Returns true if the merge should cascade to the mappings reference.
      • shouldObjectModifyCascadeToParts

        protected boolean shouldObjectModifyCascadeToParts​(ObjectLevelModifyQuery query)
        Returns true if any process leading to object modification should also affect its parts Usually used by write, insert, update and delete.
      • shouldUseBatchReading

        public boolean shouldUseBatchReading()
        PUBLIC: Indicates whether the referenced object should always be batch read on read all queries. Batch reading will read all of the related objects in a single query when accessed from an originating read all. This should only be used if it is know that the related objects are always required with the source object, or indirection is not used.
      • useBasicIndirection

        public void useBasicIndirection()
        PUBLIC: Indirection means that a ValueHolder will be put in-between the attribute and the real object. This allows for the reading of the target from the database to be delayed until accessed. This defaults to true and is strongly suggested as it give a huge performance gain.
      • useBatchReading

        public void useBatchReading()
        PUBLIC: Indicates whether the referenced object should always be batch read on read all queries. Batch reading will read all of the related objects in a single query when accessed from an originating read all. This should only be used if it is know that the related objects are always required with the source object, or indirection is not used.
      • useWeavedIndirection

        public void useWeavedIndirection​(String getMethodName,
                                         String setMethodName,
                                         boolean hasUsedMethodAccess)
        INTERNAL: Configures the mapping to used weaved indirection. This requires that the toplink-agent be used to weave indirection into the class. This policy is only require for method access.
        Parameters:
        getMethodName - is the name of the original (or weaved in field access case) set method for the mapping.
        setMethodName - is the name of the original (or weaved in field access case) set method for the mapping.
        hasUsedMethodAccess - indicates whether method or field access was originally used.
      • useContainerIndirection

        public void useContainerIndirection​(Class containerClass)
        PUBLIC: Indirection means that a IndirectContainer (wrapping a ValueHolder) will be put in-between the attribute and the real object. This allows for an application specific class to be used which wraps the value holder. The purpose of this is that the domain objects will not require to import the ValueHolderInterface class. Refer also to transparent indirection for a transparent solution to indirection.
      • usesIndirection

        public boolean usesIndirection()
        PUBLIC: Indirection means that some sort of indirection object will be put in-between the attribute and the real object. This allows for the reading of the target from the database to be delayed until accessed. This defaults to true and is strongly suggested as it give a huge performance gain.
      • updateChangeRecordForSelfMerge

        public abstract void updateChangeRecordForSelfMerge​(ChangeRecord changeRecord,
                                                            Object source,
                                                            Object target,
                                                            UnitOfWorkChangeSet parentUOWChangeSet,
                                                            UnitOfWorkImpl unitOfWork)
        INTERNAL: Update a ChangeRecord to replace the ChangeSet for the old entity with the changeSet for the new Entity. This is used when an Entity is merged into itself and the Entity reference new or detached entities.
      • setJoinFetch

        public void setJoinFetch​(int joinFetch)
        PUBLIC: Indicates whether the referenced object(s) should always be joined on read queries. Joining will join the two classes tables to read all of the data in a single query. This should only be used if it is know that the related objects are always required with the source object, or indirection is not used. A join-fetch can either use an INNER_JOIN or OUTER_JOIN, if the relationship may reference null or an empty collection an outer join should be used to avoid filtering the source objects from the queries. Join fetch can also be specified on the query, and it is normally more efficient to do so as some queries may not require the related objects. Typically batch reading is more efficient than join fetching and should be considered, especially for collection relationships.
        See Also:
        ObjectLevelReadQuery.addJoinedAttribute(String), ObjectLevelReadQuery.addBatchReadAttribute(String)
      • getJoinFetch

        public int getJoinFetch()
        PUBLIC: Return if this relationship should always be join fetched.
      • setMappedBy

        public void setMappedBy​(String mappedBy)
        INTERNAL: Called by JPA metadata processing to store the owning mapping for this mapping
        Parameters:
        mappedBy -
      • isJoinFetched

        public boolean isJoinFetched()
        PUBLIC: Return if this relationship should always be join fetched.
      • isInnerJoinFetched

        public boolean isInnerJoinFetched()
        PUBLIC: Return if this relationship should always be INNER join fetched.
      • isOuterJoinFetched

        public boolean isOuterJoinFetched()
        PUBLIC: Return if this relationship should always be OUTER join fetched.
      • useInnerJoinFetch

        public void useInnerJoinFetch()
        PUBLIC: Specify this relationship to always be join fetched using an INNER join.
      • useOuterJoinFetch

        public void useOuterJoinFetch()
        PUBLIC: Specify this relationship to always be join fetched using an OUTER join.
      • isCascadeOnDeleteSetOnDatabase

        public boolean isCascadeOnDeleteSetOnDatabase()
        ADVANCED: Return if delete cascading has been set on the database for the mapping's foreign key constraint.
      • setIsCascadeOnDeleteSetOnDatabase

        public void setIsCascadeOnDeleteSetOnDatabase​(boolean isCascadeOnDeleteSetOnDatabase)
        ADVANCED: Set if delete cascading has been set on the database for the mapping's foreign key constraint. The behavior is dependent on the mapping.

        OneToOne (target foreign key) - deletes target object (private owned)

        OneToMany, AggregateCollection - deletes target objects (private owned)

        ManyToMany - deletes from join table (only)

        DirectCollection - delete from direct table

      • setIsCacheable

        public void setIsCacheable​(boolean cacheable)
        Used to signal that this mapping references a protected/isolated entity and requires special merge/object building behaviour.
        Overrides:
        setIsCacheable in class DatabaseMapping
      • valueFromPKList

        public abstract Object valueFromPKList​(Object[] pks,
                                               AbstractRecord foreignKeys,
                                               AbstractSession session)
        This method is used to load a relationship from a list of PKs. This list may be available if the relationship has been cached.
      • shouldUseValueFromRowWithJoin

        protected boolean shouldUseValueFromRowWithJoin​(JoinedAttributeManager joinManager,
                                                        ObjectBuildingQuery sourceQuery)
        INTERNAL: Indicates whether valueFromRow should call valueFromRowInternalWithJoin (true) or valueFromRowInternal (false)
      • valueFromRowInternal

        protected Object valueFromRowInternal​(AbstractRecord row,
                                              JoinedAttributeManager joinManager,
                                              ObjectBuildingQuery sourceQuery,
                                              AbstractSession executionSession,
                                              boolean shouldUseSopObject)
                                       throws DatabaseException
        INTERNAL: Return the value of the reference attribute or a value holder. Check whether the mapping's attribute should be optimized through batch and joining.
        Parameters:
        shouldUseSopObject - indicates whether sopObject stored in the row should be used to extract the value (and fields/values stored in the row ignored).
        Throws:
        DatabaseException
      • isExtendingPessimisticLockScope

        protected boolean isExtendingPessimisticLockScope​(ObjectBuildingQuery sourceQuery)
        INTERNAL: Indicates whether the source query's pessimistic lock scope scope should be extended in the target query.
      • prepareHistoricalQuery

        protected ReadQuery prepareHistoricalQuery​(ReadQuery targetQuery,
                                                   ObjectBuildingQuery sourceQuery,
                                                   AbstractSession executionSession)
        INTERNAL: Allow for the mapping to perform any historical query additions. Return the new target query.
      • getBatchFetchType

        public BatchFetchType getBatchFetchType()
        PUBLIC: Return the type of batch fetching to use for all queries for this class if configured.
      • setBatchFetchType

        public void setBatchFetchType​(BatchFetchType batchFetchType)
        PUBLIC: Set the type of batch fetching to use for all queries for this class.
      • addTargetForeignKeyField

        public void addTargetForeignKeyField​(DatabaseField targetForeignKeyField,
                                             DatabaseField sourcePrimaryKeyField)
        INTERNAL: Allow subclass to define a foreign key in the target's table.
      • addForeignKeyField

        public void addForeignKeyField​(DatabaseField sourceForeignKeyField,
                                       DatabaseField targetPrimaryKeyField)
        INTERNAL: Allow subclass to define a foreign key in the source's table.