Skip navigation links
org.eclipse.persistence.mappings.structures
Class NestedTableMapping
java.lang.Object
org.eclipse.persistence.mappings.DatabaseMapping
org.eclipse.persistence.mappings.ForeignReferenceMapping
org.eclipse.persistence.mappings.CollectionMapping
org.eclipse.persistence.mappings.structures.NestedTableMapping
- All Implemented Interfaces:
- java.io.Serializable, java.lang.Cloneable, ContainerMapping
-
public class NestedTableMapping
- extends CollectionMapping
Purpose: Nested tables are similar to VARRAYs
except internally they store their information in a separate table from their parent structure's table. The advantage of nested tables is that they support querying and joining much better than varrays that are inlined into the parent table. A nested table is typically used to represent a one-to-many or many-to-many relationship of references to another independent structure. TopLink supports storing a nested table of values into a single field.
NOTE: Only Oracle8i supports nested tables type.
- Since:
- TOPLink/Java 2.5
- See Also:
- Serialized Form
Field Summary |
protected org.eclipse.persistence.internal.helper.DatabaseField |
field
A ref is always stored in a single field. |
protected DatabaseMapping |
nestedMapping
|
protected java.lang.String |
structureName
Arrays require a structure name, this is the ADT defined for the VARRAY. |
Fields inherited from class org.eclipse.persistence.mappings.ForeignReferenceMapping |
batchFetchType, cascadeDetach, cascadeMerge, cascadePersist, cascadeRefresh, cascadeRemove, forceInitializationOfSelectionCriteria, hasCustomSelectionQuery, indirectionPolicy, INNER_JOIN, isCascadeOnDeleteSetOnDatabase, isPrivateOwned, joinFetch, NONE, OUTER_JOIN, partitioningPolicy, partitioningPolicyName, QUERY_BATCH_PARAMETER, referenceClass, referenceClassName, referenceDescriptor, relationshipPartner, relationshipPartnerAttributeName, requiresTransientWeavedFields, selectionQuery, tempInitSession |
Fields inherited from class org.eclipse.persistence.mappings.DatabaseMapping |
attributeAccessor, attributeName, derivedIdMapping, derivesId, descriptor, fields, isCacheable, isJPAId, isLazy, isMapKeyMapping, isOptional, isPrimaryKeyMapping, isReadOnly, isRemotelyInitialized, mapsIdValue, NO_FIELDS, NO_WEIGHT, properties, weight, WEIGHT_AGGREGATE, WEIGHT_DIRECT, WEIGHT_TO_ONE, WEIGHT_TRANSFORM |
Method Summary |
java.lang.Object |
clone()
INTERNAL: The mapping clones itself to create deep copy |
protected java.util.Vector |
collectFields()
Returns all the aggregate fields. |
org.eclipse.persistence.internal.helper.DatabaseField |
getField()
INTERNAL: Returns the field which this mapping represents. |
java.lang.String |
getFieldName()
PUBLIC: Return the name of the field this mapping represents. |
Expression |
getJoinCriteria(org.eclipse.persistence.internal.expressions.QueryKeyExpression exp)
INTERNAL: Join criteria is created to read target records (nested table) from the table. |
java.lang.String |
getStructureName()
PUBLIC: Return the structure name of the nestedTable. |
boolean |
hasConstraintDependency()
INTERNAL: The returns if the mapping has any constraint dependencies, such as foreign keys and join tables. |
void |
initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Initialize the mapping. |
protected void |
initializeSelectionCriteria(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Selection criteria is created to read target records (nested table) from the table. |
boolean |
isNestedTableMapping()
INTERNAL: |
void |
postInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Post Initialize the mapping. |
void |
preDelete(DeleteObjectQuery query)
INTERNAL: Delete privately owned parts |
void |
preInsert(WriteObjectQuery query)
INTERNAL: Insert privately owned parts |
void |
preUpdate(WriteObjectQuery query)
INTERNAL: Update the privately owned parts |
protected void |
setField(org.eclipse.persistence.internal.helper.DatabaseField theField)
Set the field in the mapping. |
void |
setFieldName(java.lang.String FieldName)
PUBLIC: Set the field name in the mapping. |
void |
setStructureName(java.lang.String structureName)
PUBLIC: Set the name of the structure. |
protected void |
verifyDeleteForUpdate(DeleteObjectQuery query)
INTERNAL: Verifying deletes make sure that all the records privately owned by this mapping are actually removed. |
void |
writeFromObjectIntoRow(java.lang.Object object, org.eclipse.persistence.internal.sessions.AbstractRecord record, org.eclipse.persistence.internal.sessions.AbstractSession session, DatabaseMapping.WriteType writeType)
INTERNAL: Get a value from the object and set that in the respective field of the row. |
void |
writeFromObjectIntoRowForShallowInsert(java.lang.Object object, org.eclipse.persistence.internal.sessions.AbstractRecord record, org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This row is built for shallow insert which happens in case of bidirectional inserts. |
void |
writeFromObjectIntoRowForShallowInsertWithChangeRecord(org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord, org.eclipse.persistence.internal.sessions.AbstractRecord record, org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: This row is built for shallow insert which happens in case of bidirectional inserts. |
void |
writeFromObjectIntoRowForUpdate(WriteObjectQuery writeQuery, org.eclipse.persistence.internal.sessions.AbstractRecord record)
INTERNAL: Write the entire structure into the row as a special type that prints as the constructor. |
void |
writeFromObjectIntoRowWithChangeRecord(org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord, org.eclipse.persistence.internal.sessions.AbstractRecord record, org.eclipse.persistence.internal.sessions.AbstractSession session, DatabaseMapping.WriteType writeType)
INTERNAL: Get a value from the object and set that in the respective field of the row. |
void |
writeInsertFieldsIntoRow(org.eclipse.persistence.internal.sessions.AbstractRecord record, org.eclipse.persistence.internal.sessions.AbstractSession session)
INTERNAL: Write fields needed for insert into the template for with null values. |
Methods inherited from class org.eclipse.persistence.mappings.CollectionMapping |
addAggregateOrderBy, addAscendingOrdering, addDescendingOrdering, addOrderBy, buildBackupCloneForPartObject, buildChangeRecord, buildCloneForPartObject, buildContainerClone, buildCopy, buildElementClone, buildElementUnitOfWorkClone, buildListOrderField, buildReferencesPKList, calculateDeferredChanges, cascadeDiscoverAndPersistUnregisteredNewObjects, cascadePerformRemoveIfRequired, cascadePerformRemovePrivateOwnedObjectFromChangeSetIfRequired, cascadeRegisterNewIfRequired, collectQueryParameters, compareCollectionsForChange, compareForChange, compareLists, compareListsAndWrite, compareObjects, compareObjectsAndWrite, compareObjectsWithoutPrivateOwned, compareObjectsWithPrivateOwned, convertClassNamesToClasses, executeBatchQuery, extractKeyFromTargetRow, extractResultFromBatchQuery, fixRealObjectReferences, getAdditionalFieldsBaseExpression, getContainerPolicy, getDeleteAllQuery, getListOrderField, getObjectCorrespondingTo, getOrderByQueryKeyExpressions, getOrderCorrectionType, getRealCollectionAttributeValueFromObject, getSelectionQueryContainerPolicy, getTargetPrimaryKeyFields, hasCustomDeleteAllQuery, hasOrderBy, initializeChangeOrderTargetQuery, initializeListOrderField, initializeListOrderFieldTable, isAttributeValueInstantiatedOrChanged, isChangeTrackingSupported, isCollectionMapping, isListOrderFieldSupported, isMapKeyObjectRelationship, iterateOnElement, iterateOnRealAttributeValue, mergeChangesIntoObject, mergeIntoObject, mustDeleteReferenceObjectsOneByOne, objectAddedDuringUpdate, objectOrderChangedDuringUpdate, objectRemovedDuringUpdate, objectUnchangedDuringUpdate, objectUnchangedDuringUpdate, postCalculateChanges, postDelete, postInsert, postPrepareNestedBatchQuery, prepareTranslationRow, readPrivateOwnedForObject, recordPrivateOwnedRemovals, replaceValueHoldersIn, setChangeListener, setContainerPolicy, setCustomDeleteAllQuery, setDeleteAllCall, setDeleteAllQuery, setDeleteAllSQLString, setHasCustomDeleteAllQuery, setListOrderField, setListOrderFieldName, setMustDeleteReferenceObjectsOneByOne, setOrderCorrectionType, setSelectionQueryContainerPolicy, setSessionName, setUseLazyInstantiationForIndirectCollection, shouldUseLazyInstantiationForIndirectCollection, shouldUseListOrderFieldTableExpression, simpleAddToCollectionChangeRecord, simpleRemoveFromCollectionChangeRecord, updateChangeRecord, updateCollectionChangeRecord, useCollectionClass, useCollectionClassName, useListClassName, useMapClass, useMapClass, useMapClassName, useSortedSetClass, useSortedSetClassName, useSortedSetClassName, useTransparentCollection, useTransparentList, useTransparentMap, useTransparentSet, validateBeforeInitialization, valueFromPKList, valueFromRowInternalWithJoin, verifyDelete, writeChanges |
Methods inherited from class org.eclipse.persistence.mappings.ForeignReferenceMapping |
batchedValueFromRow, buildBackupClone, buildBatchCriteria, buildClone, buildCloneFromRow, checkCacheForBatchKey, createCloneValueHolder, dontDoMerge, dontUseBatchReading, dontUseIndirection, extendPessimisticLockScopeInSourceQuery, extendPessimisticLockScopeInTargetQuery, extractBatchKeyFromRow, fixObjectReferences, getAttributeValueFromObject, getAttributeValueWithClonedValueHolders, getBatchFetchType, getExtendPessimisticLockScopeDedicatedQuery, getFieldsForTranslationInAggregate, getIndirectionPolicy, getJoinFetch, getPartitioningPolicy, getPartitioningPolicyName, getRealAttributeValueFromAttribute, getReferenceClass, getReferenceClassName, getReferenceDescriptor, getRelationshipPartner, getRelationshipPartnerAttributeName, getSelectionCriteria, getSelectionQuery, getTempSession, getValueFromRemoteValueHolder, hasCustomSelectionQuery, hasDependency, initializeReferenceDescriptor, initializeSelectionQuery, instantiateAttribute, isAttributeValueFullyBuilt, isAttributeValueInstantiated, isCascadeDetach, isCascadeMerge, isCascadeOnDeleteSetOnDatabase, isCascadePersist, isCascadeRefresh, isCascadeRemove, isExtendingPessimisticLockScope, isForeignReferenceMapping, isInnerJoinFetched, isJoinFetched, isJoiningSupported, isLazy, isLockableMapping, isOuterJoinFetched, isPrivateOwned, iterate, mergeRemoteValueHolder, preInitialize, prepareHistoricalQuery, prepareNestedBatchQuery, prepareNestedJoinQueryClone, prepareNestedJoins, privateOwnedRelationship, readFromRowIntoObject, remoteInitialization, requiresTransientWeavedFields, setBatchFetchType, setCascadeAll, setCascadeDetach, setCascadeMerge, setCascadePersist, setCascadeRefresh, setCascadeRemove, setCustomSelectionQuery, setForceInitializationOfSelectionCriteria, setHasCustomSelectionQuery, setIndirectionPolicy, setIsCacheable, setIsCascadeOnDeleteSetOnDatabase, setIsPrivateOwned, setJoinFetch, setPartitioningPolicy, setPartitioningPolicyName, setRealAttributeValueInObject, setReferenceClass, setReferenceClassName, setReferenceDescriptor, setRelationshipPartner, setRelationshipPartnerAttributeName, setRequiresTransientWeavedFields, setSelectionCall, setSelectionCriteria, setSelectionQuery, setSelectionSQLString, setShouldExtendPessimisticLockScope, setTempSession, setUsesBatchReading, setUsesIndirection, shouldExtendPessimisticLockScope, shouldExtendPessimisticLockScopeInDedicatedQuery, shouldExtendPessimisticLockScopeInSourceQuery, shouldExtendPessimisticLockScopeInTargetQuery, shouldForceInitializationOfSelectionCriteria, shouldInitializeSelectionCriteria, shouldMergeCascadeParts, shouldMergeCascadeReference, shouldObjectModifyCascadeToParts, shouldUseBatchReading, shouldUseValueFromRowWithJoin, trimRowForJoin, trimRowForJoin, useBasicIndirection, useBatchReading, useContainerIndirection, useInnerJoinFetch, useOuterJoinFetch, usesIndirection, useWeavedIndirection, valueFromRow, valueFromRowInternal |
Methods inherited from class org.eclipse.persistence.mappings.DatabaseMapping |
buildExpression, buildObjectJoinExpression, buildObjectJoinExpression, buildShallowOriginalFromRow, cloneFields, derivesId, earlyPreDelete, extractNestedExpressions, getAttributeAccessor, getAttributeClassification, getAttributeName, getDerivedIdMapping, getDescriptor, getFieldClassification, getFields, getGetMethodName, getMapsIdValue, getProperties, getProperty, getRealAttributeValueFromObject, getSelectFields, getSelectTables, getSetMethodName, getWeight, hasInverseConstraintDependency, hasMapsIdValue, hasRootExpressionThatShouldUseOuterJoin, isAbstractCompositeCollectionMapping, isAbstractCompositeDirectCollectionMapping, isAbstractCompositeObjectMapping, isAbstractDirectMapping, isAggregateCollectionMapping, isAggregateMapping, isAggregateObjectMapping, isCacheable, isCandidateForPrivateOwnedRemoval, isCascadedLockingSupported, isCloningRequired, isDatabaseMapping, isDirectCollectionMapping, isDirectMapMapping, isDirectToFieldMapping, isDirectToXMLTypeMapping, isEISMapping, isElementCollectionMapping, isJPAId, isManyToManyMapping, isManyToOneMapping, isMapKeyMapping, isObjectReferenceMapping, isOneToManyMapping, isOneToOneMapping, isOptional, isOwned, isPrimaryKeyMapping, isReadOnly, isReferenceMapping, isRelationalMapping, isRemotelyInitialized, isStructureMapping, isTransformationMapping, isUnidirectionalOneToManyMapping, isUsingMethodAccess, isVariableOneToOneMapping, isWriteOnly, isXMLMapping, performDataModificationEvent, postCalculateChangesOnDeleted, postUpdate, prepareCascadeLockingPolicy, readFromResultSetIntoObject, readOnly, readWrite, rehashFieldDependancies, remotelyInitialized, setAttributeAccessor, setAttributeName, setAttributeValueInObject, setDerivedIdMapping, setDerivesId, setDescriptor, setFields, setGetMethodName, setIsJPAId, setIsLazy, setIsMapKeyMapping, setIsOptional, setIsPrimaryKeyMapping, setIsReadOnly, setMapsIdValue, setProperties, setProperty, setSetMethodName, setWeight, toString, validateAfterInitialization, valueFromObject, valueFromResultSet, valueFromRow, writeFromAttributeIntoRow, writeFromObjectIntoRowForWhereClause, writeUpdateFieldsIntoRow |
Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
nestedMapping
protected DatabaseMapping nestedMapping
field
protected org.eclipse.persistence.internal.helper.DatabaseField field
- A ref is always stored in a single field.
structureName
protected java.lang.String structureName
- Arrays require a structure name, this is the ADT defined for the VARRAY.
NestedTableMapping
public NestedTableMapping()
- PUBLIC: Default constructor.
clone
public java.lang.Object clone()
- INTERNAL: The mapping clones itself to create deep copy
-
- Overrides:
clone
in class CollectionMapping
collectFields
protected java.util.Vector collectFields()
- Returns all the aggregate fields.
-
- Overrides:
collectFields
in class DatabaseMapping
getField
public org.eclipse.persistence.internal.helper.DatabaseField getField()
- INTERNAL: Returns the field which this mapping represents.
-
- Overrides:
getField
in class DatabaseMapping
getFieldName
public java.lang.String getFieldName()
- PUBLIC: Return the name of the field this mapping represents.
getJoinCriteria
public Expression getJoinCriteria(org.eclipse.persistence.internal.expressions.QueryKeyExpression exp)
- INTERNAL: Join criteria is created to read target records (nested table) from the table.
-
- Overrides:
getJoinCriteria
in class CollectionMapping
getStructureName
public java.lang.String getStructureName()
- PUBLIC: Return the structure name of the nestedTable. This is the name of the user defined data type as defined on the database.
hasConstraintDependency
public boolean hasConstraintDependency()
- INTERNAL: The returns if the mapping has any constraint dependencies, such as foreign keys and join tables.
-
- Overrides:
hasConstraintDependency
in class DatabaseMapping
initialize
public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
throws DescriptorException
- INTERNAL: Initialize the mapping.
-
- Overrides:
initialize
in class CollectionMapping
-
- Throws:
DescriptorException
initializeSelectionCriteria
protected void initializeSelectionCriteria(org.eclipse.persistence.internal.sessions.AbstractSession session)
- INTERNAL: Selection criteria is created to read target records (nested table) from the table.
isNestedTableMapping
public boolean isNestedTableMapping()
- INTERNAL:
-
- Overrides:
isNestedTableMapping
in class DatabaseMapping
postInitialize
public void postInitialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
throws DescriptorException
- INTERNAL: Post Initialize the mapping.
-
- Overrides:
postInitialize
in class CollectionMapping
-
- Throws:
DescriptorException
preDelete
public void preDelete(DeleteObjectQuery query)
throws DatabaseException,
OptimisticLockException
- INTERNAL: Delete privately owned parts
-
- Overrides:
preDelete
in class DatabaseMapping
-
- Throws:
DatabaseException
OptimisticLockException
preInsert
public void preInsert(WriteObjectQuery query)
throws DatabaseException,
OptimisticLockException
- INTERNAL: Insert privately owned parts
-
- Overrides:
preInsert
in class CollectionMapping
-
- Throws:
DatabaseException
OptimisticLockException
preUpdate
public void preUpdate(WriteObjectQuery query)
throws DatabaseException,
OptimisticLockException
- INTERNAL: Update the privately owned parts
-
- Overrides:
preUpdate
in class CollectionMapping
-
- Throws:
DatabaseException
OptimisticLockException
setField
protected void setField(org.eclipse.persistence.internal.helper.DatabaseField theField)
- Set the field in the mapping.
setFieldName
public void setFieldName(java.lang.String FieldName)
- PUBLIC: Set the field name in the mapping.
setStructureName
public void setStructureName(java.lang.String structureName)
- PUBLIC: Set the name of the structure. This is the name of the user defined nested table data type as defined on the database.
verifyDeleteForUpdate
protected void verifyDeleteForUpdate(DeleteObjectQuery query)
throws DatabaseException,
OptimisticLockException
- INTERNAL: Verifying deletes make sure that all the records privately owned by this mapping are actually removed. If such records are found then those are all read and removed one by one taking their privately owned parts into account.
-
- Throws:
DatabaseException
OptimisticLockException
writeFromObjectIntoRow
public void writeFromObjectIntoRow(java.lang.Object object,
org.eclipse.persistence.internal.sessions.AbstractRecord record,
org.eclipse.persistence.internal.sessions.AbstractSession session,
DatabaseMapping.WriteType writeType)
- INTERNAL: Get a value from the object and set that in the respective field of the row.
-
- Overrides:
writeFromObjectIntoRow
in class DatabaseMapping
writeFromObjectIntoRowWithChangeRecord
public void writeFromObjectIntoRowWithChangeRecord(org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord,
org.eclipse.persistence.internal.sessions.AbstractRecord record,
org.eclipse.persistence.internal.sessions.AbstractSession session,
DatabaseMapping.WriteType writeType)
- INTERNAL: Get a value from the object and set that in the respective field of the row.
-
- Overrides:
writeFromObjectIntoRowWithChangeRecord
in class DatabaseMapping
writeFromObjectIntoRowForShallowInsert
public void writeFromObjectIntoRowForShallowInsert(java.lang.Object object,
org.eclipse.persistence.internal.sessions.AbstractRecord record,
org.eclipse.persistence.internal.sessions.AbstractSession session)
- INTERNAL: This row is built for shallow insert which happens in case of bidirectional inserts. The foreign keys must be set to null to avoid constraints.
-
- Overrides:
writeFromObjectIntoRowForShallowInsert
in class DatabaseMapping
writeFromObjectIntoRowForShallowInsertWithChangeRecord
public void writeFromObjectIntoRowForShallowInsertWithChangeRecord(org.eclipse.persistence.internal.sessions.ChangeRecord changeRecord,
org.eclipse.persistence.internal.sessions.AbstractRecord record,
org.eclipse.persistence.internal.sessions.AbstractSession session)
- INTERNAL: This row is built for shallow insert which happens in case of bidirectional inserts. The foreign keys must be set to null to avoid constraints.
-
- Overrides:
writeFromObjectIntoRowForShallowInsertWithChangeRecord
in class DatabaseMapping
writeFromObjectIntoRowForUpdate
public void writeFromObjectIntoRowForUpdate(WriteObjectQuery writeQuery,
org.eclipse.persistence.internal.sessions.AbstractRecord record)
throws DescriptorException
- INTERNAL: Write the entire structure into the row as a special type that prints as the constructor. If any part of the structure has changed the whole thing is written.
-
- Overrides:
writeFromObjectIntoRowForUpdate
in class DatabaseMapping
-
- Throws:
DescriptorException
writeInsertFieldsIntoRow
public void writeInsertFieldsIntoRow(org.eclipse.persistence.internal.sessions.AbstractRecord record,
org.eclipse.persistence.internal.sessions.AbstractSession session)
- INTERNAL: Write fields needed for insert into the template for with null values.
-
- Overrides:
writeInsertFieldsIntoRow
in class DatabaseMapping
Skip navigation links