Class RelationTableMechanism

    • Field Detail

      • relationTable

        protected DatabaseTable relationTable
        The intermediate relation table.
      • sourceKeyFields

        protected Vector<DatabaseField> sourceKeyFields
        The field in the source table that corresponds to the key in the relation table
      • targetKeyFields

        protected Vector<DatabaseField> targetKeyFields
        The field in the target table that corresponds to the key in the relation table
      • sourceRelationKeyFields

        protected Vector<DatabaseField> sourceRelationKeyFields
        The field in the intermediate table that corresponds to the key in the source table
      • targetRelationKeyFields

        protected Vector<DatabaseField> targetRelationKeyFields
        The field in the intermediate table that corresponds to the key in the target table
      • deleteQuery

        protected DataModifyQuery deleteQuery
        Query used for single row deletion.
      • hasCustomDeleteQuery

        protected boolean hasCustomDeleteQuery
      • hasCustomInsertQuery

        protected boolean hasCustomInsertQuery
      • lockRelationTableQuery

        protected ReadQuery lockRelationTableQuery
    • Constructor Detail

      • RelationTableMechanism

        public RelationTableMechanism()
    • Method Detail

      • addSourceRelationKeyField

        public void addSourceRelationKeyField​(DatabaseField sourceRelationKeyField,
                                              DatabaseField sourcePrimaryKeyField)
        PUBLIC: Add the fields in the intermediate table that corresponds to the primary key in the source table. This method is used if the keys are composite.
      • addSourceRelationKeyFieldName

        public void addSourceRelationKeyFieldName​(String sourceRelationKeyFieldName,
                                                  String sourcePrimaryKeyFieldName)
        PUBLIC: Add the fields in the intermediate table that corresponds to the primary key in the source table. This method is used if the keys are composite.
      • addTargetRelationKeyField

        public void addTargetRelationKeyField​(DatabaseField targetRelationKeyField,
                                              DatabaseField targetPrimaryKeyField)
        PUBLIC: Add the fields in the intermediate table that corresponds to the primary key in the target table. This method is used if the keys are composite.
      • addTargetRelationKeyFieldName

        public void addTargetRelationKeyFieldName​(String targetRelationKeyFieldName,
                                                  String targetPrimaryKeyFieldName)
        PUBLIC: Add the fields in the intermediate table that corresponds to the primary key in the target table. This method is used if the keys are composite.
      • buildSelectionCriteriaAndAddFieldsToQueryInternal

        public Expression buildSelectionCriteriaAndAddFieldsToQueryInternal​(ForeignReferenceMapping mapping,
                                                                            Expression criteria,
                                                                            boolean shouldAddTargetFields,
                                                                            boolean shouldAddFieldsToQuery)
        INTERNAL: Build the selection criteria to join the source, relation, and target tables.
      • collectQueryParameters

        protected 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
      • clone

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

        protected Vector cloneFields​(Vector fields)
        INTERNAL: Helper method to clone vector of fields (used in aggregate initialization cloning).
      • setRelationTableLockingClause

        public void setRelationTableLockingClause​(ObjectLevelReadQuery targetQuery,
                                                  ObjectBuildingQuery sourceQuery)
        INTERNAL: Return relation table locking clause.
      • getRelationTable

        public DatabaseTable getRelationTable()
        INTERNAL: Return the relation table associated with the mapping.
      • getRelationTableName

        public String getRelationTableName()
        PUBLIC: Return the relation table name associated with the mapping.
      • getRelationTableQualifiedName

        public String getRelationTableQualifiedName()
        PUBLIC: Return the relation table qualified name associated with the mapping.
      • getSourceKeyFieldNames

        public Vector getSourceKeyFieldNames()
        PUBLIC: Return the source key field names associated with the mapping. These are in-order with the sourceRelationKeyFieldNames.
      • postPrepareNestedBatchQuery

        public void postPrepareNestedBatchQuery​(ReadQuery batchQuery,
                                                ObjectLevelReadQuery query)
        INTERNAL: Add the addition join fields to the batch query.
      • extractBatchKeyFromRow

        protected Object extractBatchKeyFromRow​(AbstractRecord row,
                                                AbstractSession session)
        INTERNAL: Extract the foreign key value from the source row.
      • extractKeyFromTargetRow

        protected Object extractKeyFromTargetRow​(AbstractRecord row,
                                                 AbstractSession session)
        INTERNAL: Extract the source primary key value from the relation row. Used for batch reading, most following same order and fields as in the mapping.
      • getSourceKeyFields

        public Vector<DatabaseField> getSourceKeyFields()
        INTERNAL: Return all the source key fields associated with the mapping.
      • getSourceRelationKeyFieldNames

        public Vector getSourceRelationKeyFieldNames()
        PUBLIC: Return the source relation key field names associated with the mapping. These are in-order with the sourceKeyFieldNames.
      • getSourceRelationKeyFields

        public Vector<DatabaseField> getSourceRelationKeyFields()
        INTERNAL: Return all the source relation key fields associated with the mapping.
      • getTargetKeyFieldNames

        public Vector getTargetKeyFieldNames()
        PUBLIC: Return the target key field names associated with the mapping. These are in-order with the targetRelationKeyFieldNames.
      • getRelationFieldForTargetField

        public DatabaseField getRelationFieldForTargetField​(DatabaseField targetField)
        INTERNAL: Return the relation field for the target field.
      • getTargetKeyFields

        public Vector<DatabaseField> getTargetKeyFields()
        INTERNAL: Return all the target keys associated with the mapping.
      • getTargetRelationKeyFieldNames

        public Vector getTargetRelationKeyFieldNames()
        PUBLIC: Return the target relation key field names associated with the mapping. These are in-order with the targetKeyFieldNames.
      • getTargetRelationKeyFields

        public Vector<DatabaseField> getTargetRelationKeyFields()
        INTERNAL: Return all the target relation key fields associated with the mapping.
      • hasCustomDeleteQuery

        protected boolean hasCustomDeleteQuery()
      • hasCustomInsertQuery

        protected boolean hasCustomInsertQuery()
      • hasRelationTable

        public boolean hasRelationTable()
        INTERNAL: Indicates whether the mechanism has relation table.
      • initializeDeleteQuery

        protected void initializeDeleteQuery​(AbstractSession session,
                                             ForeignReferenceMapping mapping)
        INTERNAL: Initialize delete query. This query is used to delete a specific row from the join table in uow, given the objects on both sides of the relation.
      • initializeExtendPessipisticLockScope

        protected void initializeExtendPessipisticLockScope​(AbstractSession session,
                                                            ForeignReferenceMapping mapping)
        INTERNAL: Initialize extendPessimisticLockeScope and lockRelationTableQuery (if required).
      • initializeInsertQuery

        protected void initializeInsertQuery​(AbstractSession session,
                                             ForeignReferenceMapping mapping)
        INTERNAL: Initialize insert query. This query is used to insert the collection of objects into the relation table.
      • initializeSourceKeys

        protected void initializeSourceKeys​(ForeignReferenceMapping mapping)
        INTERNAL: All the source key field names are converted to DatabaseField and stored.
      • initializeSourceKeysWithDefaults

        protected void initializeSourceKeysWithDefaults​(DatabaseMapping mapping)
        INTERNAL: If a user does not specify the source key then the primary keys of the source table are used.
      • initializeTargetKeys

        protected void initializeTargetKeys​(AbstractSession session,
                                            ForeignReferenceMapping mapping)
        INTERNAL: All the target key field names are converted to DatabaseField and stored.
      • initializeTargetKeysWithDefaults

        protected void initializeTargetKeysWithDefaults​(AbstractSession session,
                                                        ForeignReferenceMapping mapping)
        INTERNAL: If a user does not specify the target key then the primary keys of the target table are used.
      • initializeTargetRelationKeys

        protected void initializeTargetRelationKeys​(ForeignReferenceMapping mapping)
        INTERNAL: All the target relation key field names are converted to DatabaseField and stored.
      • isSingleSourceRelationKeySpecified

        protected boolean isSingleSourceRelationKeySpecified()
        INTERNAL: Checks if a single source key was specified.
      • isSingleTargetRelationKeySpecified

        protected boolean isSingleTargetRelationKeySpecified()
        INTERNAL: Checks if a single target key was specified.
      • joinRelationTableField

        public Expression joinRelationTableField​(Expression expression,
                                                 Expression baseExpression)
        INTERNAL: Adds to the passed expression a single relation table field joined to source field. Used to extend pessimistic locking clause in source query.
      • setCustomDeleteQuery

        public void setCustomDeleteQuery​(DataModifyQuery query)
        PUBLIC: The default delete query for mapping can be overridden by specifying the new query. This query must delete the row from the M-M join table.
      • setCustomInsertQuery

        public void setCustomInsertQuery​(DataModifyQuery query)
        PUBLIC: The default insert query for mapping can be overridden by specifying the new query. This query must insert the row into the M-M join table.
      • setDeleteQuery

        protected void setDeleteQuery​(DataModifyQuery deleteQuery)
      • setDeleteSQLString

        public void setDeleteSQLString​(String sqlString)
        PUBLIC: Set the receiver's delete 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 is used to delete a single entry from the M-M join table. Example, 'delete from PROJ_EMP where PROJ_ID = #PROJ_ID AND EMP_ID = #EMP_ID'.
      • setDeleteCall

        public void setDeleteCall​(Call call)
        PUBLIC: Set the receiver's delete 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 is used to delete a single entry from the M-M join table. Example, 'new SQLCall("delete from PROJ_EMP where PROJ_ID = #PROJ_ID AND EMP_ID = #EMP_ID")'.
      • setHasCustomDeleteQuery

        protected void setHasCustomDeleteQuery​(boolean hasCustomDeleteQuery)
      • setHasCustomInsertQuery

        protected void setHasCustomInsertQuery​(boolean bool)
      • setInsertQuery

        protected void setInsertQuery​(DataModifyQuery insertQuery)
      • setInsertSQLString

        public void setInsertSQLString​(String sqlString)
        PUBLIC: Set the receiver's insert 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 is used to insert an entry into the M-M join table. Example, 'insert into PROJ_EMP (EMP_ID, PROJ_ID) values (#EMP_ID, #PROJ_ID)'.
      • setInsertCall

        public void setInsertCall​(Call call)
        PUBLIC: Set the receiver's insert 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 is used to insert an entry into the M-M join table. Example, 'new SQLCall("insert into PROJ_EMP (EMP_ID, PROJ_ID) values (#EMP_ID, #PROJ_ID)")'.
      • setRelationTable

        public void setRelationTable​(DatabaseTable relationTable)
        PUBLIC: Set the relational table. This is the join table that store both the source and target primary keys.
      • setRelationTableName

        public void setRelationTableName​(String tableName)
        PUBLIC: Set the name of the relational table. This is the join table that store both the source and target primary keys.
      • 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.
      • setSourceKeyFieldNames

        public void setSourceKeyFieldNames​(Vector fieldNames)
        PUBLIC: Set the source key field names associated with the mapping. These must be in-order with the sourceRelationKeyFieldNames.
      • setSourceKeyFields

        public void setSourceKeyFields​(Vector<DatabaseField> sourceKeyFields)
        INTERNAL: Set the source fields.
      • setSourceRelationKeyFieldName

        public void setSourceRelationKeyFieldName​(String sourceRelationKeyFieldName)
        PUBLIC: Set the source key field in the relation table. This is the name of the foreign key in the relation table to the source's primary key field. This method is used if the source primary key is a singleton only.
      • setSourceRelationKeyFieldNames

        public void setSourceRelationKeyFieldNames​(Vector fieldNames)
        PUBLIC: Set the source relation key field names associated with the mapping. These must be in-order with the sourceKeyFieldNames.
      • setSourceRelationKeyFields

        public void setSourceRelationKeyFields​(Vector<DatabaseField> sourceRelationKeyFields)
        INTERNAL: Set the source fields.
      • setTargetKeyFieldNames

        public void setTargetKeyFieldNames​(Vector fieldNames)
        INTERNAL: Set the target key field names associated with the mapping. These must be in-order with the targetRelationKeyFieldNames.
      • setTargetKeyFields

        public void setTargetKeyFields​(Vector<DatabaseField> targetKeyFields)
        INTERNAL: Set the target fields.
      • setTargetRelationKeyFieldName

        public void setTargetRelationKeyFieldName​(String targetRelationKeyFieldName)
        PUBLIC: Set the target key field in the relation table. This is the name of the foreign key in the relation table to the target's primary key field. This method is used if the target's primary key is a singleton only.
      • setTargetRelationKeyFieldNames

        public void setTargetRelationKeyFieldNames​(Vector fieldNames)
        INTERNAL: Set the target relation key field names associated with the mapping. These must be in-order with the targetKeyFieldNames.
      • setTargetRelationKeyFields

        public void setTargetRelationKeyFields​(Vector<DatabaseField> targetRelationKeyFields)
        INTERNAL: Set the target fields.
      • buildRelationTableSourceRow

        public AbstractRecord buildRelationTableSourceRow​(AbstractRecord sourceRow)
        INTERNAL: Create a row that contains source relation fields with values extracted from the source row.
      • addRelationTableSourceRow

        public AbstractRecord addRelationTableSourceRow​(AbstractRecord sourceRow,
                                                        AbstractRecord databaseRow)
        INTERNAL: Add to a row source relation fields with values extracted from the source row.
      • buildRelationTableSourceAndTargetRow

        public AbstractRecord buildRelationTableSourceAndTargetRow​(Object sourceObject,
                                                                   Object targetObject,
                                                                   AbstractSession session,
                                                                   ForeignReferenceMapping mapping)
        INTERNAL: Create a row that contains source relation fields with values extracted from the source object and target relation fields with values extracted from the target object.
      • buildRelationTableSourceAndTargetRow

        public AbstractRecord buildRelationTableSourceAndTargetRow​(AbstractRecord sourceRow,
                                                                   Object targetObject,
                                                                   AbstractSession session,
                                                                   ForeignReferenceMapping mapping)
        INTERNAL: Create a row that contains source relation fields with values extracted from the source row and target relation fields with values extracted from the target object.