Class FieldMapping

    • Constructor Detail

      • FieldMapping

        public FieldMapping​(java.lang.String name,
                            java.lang.Class<?> type,
                            ClassMapping owner)
        Constructor.
    • Method Detail

      • getMappingInfo

        public FieldMappingInfo getMappingInfo()
        Raw mapping data about field's join to parent table, as well as miscellaneous specialized columns like order column.
      • getStrategy

        public FieldStrategy getStrategy()
        The strategy used to map this mapping.
      • setStrategy

        public void setStrategy​(FieldStrategy strategy,
                                java.lang.Boolean adapt)
        The strategy used to map this mapping. The adapt parameter determines whether to adapt when mapping the strategy; use null if the strategy should not be mapped.
      • getTable

        public Table getTable()
        The mapping's primary table.
      • getJoinColumnIO

        public ColumnIO getJoinColumnIO()
        I/O information on the join columns.
      • setJoinColumnIO

        public void setJoinColumnIO​(ColumnIO io)
        I/O information on the join columns.
      • getJoinForeignKey

        public ForeignKey getJoinForeignKey()
        Foreign key linking the field table to the class' primary table.
      • setJoinForeignKey

        public void setJoinForeignKey​(ForeignKey fk)
        Foreign key linking the field table to the class' primary table.
      • getJoinUnique

        public Unique getJoinUnique()
        Unique constraint on join foreign key columns.
      • setJoinUnique

        public void setJoinUnique​(Unique unq)
        Unique constraint on join foreign key columns.
      • getJoinTableUniques

        public Unique[] getJoinTableUniques()
      • setJoinTableUniques

        public void setJoinTableUniques​(Unique[] unqs)
      • getJoinIndex

        public Index getJoinIndex()
        Index on join foreign key columns.
      • setJoinIndex

        public void setJoinIndex​(Index idx)
        Index on join foreign key columns.
      • isJoinOuter

        public boolean isJoinOuter()
        Whether to use an outer join from the class' primary table.
      • setJoinOuter

        public void setJoinOuter​(boolean outer)
        Whether to use an outer join from the class' primary table.
      • getOrderColumn

        public Column getOrderColumn()
        Field order column, if any.
      • setOrderColumn

        public void setOrderColumn​(Column order)
        Field order column, if any.
      • getOrderColumnIO

        public ColumnIO getOrderColumnIO()
        I/O information for order column.
      • setOrderColumnIO

        public void setOrderColumnIO​(ColumnIO io)
        I/O information for order column.
      • refSchemaComponents

        public void refSchemaComponents()
        Increment the reference count of used schema components.
        Specified by:
        refSchemaComponents in interface ValueMapping
      • clearMapping

        public void clearMapping()
        Clear mapping information, including strategy.
        Specified by:
        clearMapping in interface ValueMapping
      • isMapped

        public boolean isMapped()
        Returns true if field class does not use the "none" strategy (including if it has a null strategy, and therefore is probably in the process of being mapped).
        Overrides:
        isMapped in class FieldMetaData
      • getEagerFetchMode

        public int getEagerFetchMode()
        The eager fetch mode, as one of the eager constants in JDBCFetchConfiguration.
      • setEagerFetchMode

        public void setEagerFetchMode​(int mode)
        The eager fetch mode, as one of the eager constants in JDBCFetchConfiguration.
      • copyMappingInfo

        public void copyMappingInfo​(FieldMapping fm)
        Copy mapping info from the given instance to this one.
      • validateDataStoreExtensionPrefix

        protected boolean validateDataStoreExtensionPrefix​(java.lang.String prefix)
        Description copied from class: Extensions
        Return true if extensions starting with the given official datastore prefix should be validated for this runtime.
        Overrides:
        validateDataStoreExtensionPrefix in class Extensions
      • getAlias

        public java.lang.String getAlias()
        Description copied from interface: Strategy
        Return the alias of this strategy. For custom strategies, return the full class name.
        Specified by:
        getAlias in interface Strategy
      • map

        public void map​(boolean adapt)
        Description copied from interface: Strategy
        Map the owning mapping using this strategy.
        Specified by:
        map in interface Strategy
        Parameters:
        adapt - if true, use the owning mapping's raw mapping info to set its ORM data; if false, ORM data will already be set
      • mapJoin

        public void mapJoin​(boolean adapt,
                            boolean joinRequired)
        Map this field to its table, optionally requiring that it be in another table. Utility method for use by mapping strategies.
      • mapPrimaryKey

        public void mapPrimaryKey​(boolean adapt)
        Maps the primary key on the secondary table for this field, if the user's defaults create one. This must be called after this field is mapped so that it's table has its columns set.
      • initialize

        public void initialize()
        Description copied from interface: Strategy
        Perform caching and other initialization operations. This method is called after Strategy.map(boolean), and after all related components have been mapped as well.
        Specified by:
        initialize in interface Strategy
      • insert

        public void insert​(OpenJPAStateManager sm,
                           JDBCStore store,
                           RowManager rm)
                    throws java.sql.SQLException
        Description copied from interface: Strategy
        Set values for the mapping into the proper rows. For class mappings, this method will be called only after the corresponding method has been called for all fields of this mapping.
        Specified by:
        insert in interface Strategy
        Throws:
        java.sql.SQLException
      • setMappedByIdValue

        public void setMappedByIdValue​(java.lang.Object target,
                                       java.lang.Object val,
                                       java.lang.String mappedByIdFieldName)
      • deleteRow

        public void deleteRow​(OpenJPAStateManager sm,
                              JDBCStore store,
                              RowManager rm)
                       throws java.sql.SQLException
        Delete the row for this object if the reference foreign key exists. Utility method for use by mapping strategies.
        Throws:
        java.sql.SQLException
      • getRow

        public Row getRow​(OpenJPAStateManager sm,
                          JDBCStore store,
                          RowManager rm,
                          int action)
                   throws java.sql.SQLException
        Return the row to use for this field. This method is meant only for single-value fields that might reside in a table that is joined to the primary table through the join foreign key. It is not meant for multi-valued fields like collections and maps. The method checks whether we're using an outer join and if so it deletes the field's previous value, then if the field is non-null returns an insert row for the new value. The join foreign key will already be set on the returned row; mapping strategies just need to set their own values. Utility method for use by mapping strategies.
        Throws:
        java.sql.SQLException
      • customInsert

        public void customInsert​(OpenJPAStateManager sm,
                                 JDBCStore store)
                          throws java.sql.SQLException
        Description copied from interface: Strategy
        Override this method to customize flushing this mapping. For classes, this method must also flush all fields. For fields, this method is called after the owning object is inserted, so if this field is in a row with other fields, that row will already exist.
        Specified by:
        customInsert in interface Strategy
        Throws:
        java.sql.SQLException
      • customUpdate

        public void customUpdate​(OpenJPAStateManager sm,
                                 JDBCStore store)
                          throws java.sql.SQLException
        Description copied from interface: Strategy
        Override this method to customize flushing this mapping. For classes, this method must also flush all fields.
        Specified by:
        customUpdate in interface Strategy
        Throws:
        java.sql.SQLException
      • customDelete

        public void customDelete​(OpenJPAStateManager sm,
                                 JDBCStore store)
                          throws java.sql.SQLException
        Description copied from interface: Strategy
        Override this method to customize flushing this mapping. For classes, this method must also flush all fields. For fields, this method will be called after the owning object is deleted.
        Specified by:
        customDelete in interface Strategy
        Throws:
        java.sql.SQLException
      • supportsSelect

        public int supportsSelect​(Select sel,
                                  int type,
                                  OpenJPAStateManager sm,
                                  JDBCStore store,
                                  JDBCFetchConfiguration fetch)
        Description copied from interface: FieldStrategy
        Return whether this mapping can perform the given select type. Return 0 if the given type is not supported. If the given type is an eager parallel type, return the number of UNIONed selects necessary to fetch the data. Otherwise, return any positive number if the type is supported. The given state manager may be null if selecting multiple instances.
        Specified by:
        supportsSelect in interface FieldStrategy
        See Also:
        Select
      • isEagerSelectToMany

        public boolean isEagerSelectToMany()
        Description copied from interface: FieldStrategy
        Whether the eager joins or selects used by this field are to-many.
        Specified by:
        isEagerSelectToMany in interface FieldStrategy
      • select

        public int select​(Select sel,
                          OpenJPAStateManager sm,
                          JDBCStore store,
                          JDBCFetchConfiguration fetch,
                          int eagerMode)
        Description copied from interface: FieldStrategy
        Select the virtual row columns of this mapping.
        Specified by:
        select in interface FieldStrategy
        Parameters:
        sel - the select to add to
        sm - the instance being loaded, or null if not initialized yet or selecting for multiple instances
        store - the current store manager
        fetch - fetch configuration
        eagerMode - the eager fetch mode to use; this may be more restrictive than the mode of the fetch configuration
        Returns:
        > 0 if this mapping requires the selected data (if any), 0 if it selected data but does not require it, or < 0 if no data was selected
      • join

        public Joins join​(Select sel)
        Return any joins needed to get from the primary table to this table.
      • wherePrimaryKey

        public void wherePrimaryKey​(Select sel,
                                    OpenJPAStateManager sm,
                                    JDBCStore store)
        Add a wherePrimaryKey or whereForeignKey condition to the given select, depending on whether we have a join foreign key.
      • orderLocal

        public void orderLocal​(Select sel,
                               ClassMapping elem,
                               Joins joins)
        Add ordering to the given select for all non-relation order values, including the synthetic order column, if any.
        Parameters:
        elem - the related type we're fetching, or null
        joins - the joins to this field's table
      • orderRelation

        public void orderRelation​(Select sel,
                                  ClassMapping elem,
                                  Joins joins)
        Add ordering to the given select for all relation-based values.
        Parameters:
        elem - the related type we're fetching
        joins - the joins across the relation
      • loadEagerParallel

        public java.lang.Object loadEagerParallel​(OpenJPAStateManager sm,
                                                  JDBCStore store,
                                                  JDBCFetchConfiguration fetch,
                                                  java.lang.Object res)
                                           throws java.sql.SQLException
        Description copied from interface: FieldStrategy
        Load the batched eager result.
        Specified by:
        loadEagerParallel in interface FieldStrategy
        res - originally the Result to load from, but this method may return a processed result form that will be passed to subsequent calls
        Throws:
        java.sql.SQLException
      • load

        public void load​(OpenJPAStateManager sm,
                         JDBCStore store,
                         JDBCFetchConfiguration fetch,
                         Result res)
                  throws java.sql.SQLException
        Description copied from interface: FieldStrategy
        Load virtual row data; the given result is not guaranteed to contain data for this field, so the field mapping should make sure the result contains its needed column data before loading.
        Specified by:
        load in interface FieldStrategy
        Throws:
        java.sql.SQLException
      • toDataStoreValue

        public java.lang.Object toDataStoreValue​(java.lang.Object val,
                                                 JDBCStore store)
        Description copied from interface: FieldStrategy
        Translate the given external field value to its datastore equivalent. If the mapping occupies multiple columns in the datastore, return an object array, else return a single object. Simply returns the given object by default.
        Specified by:
        toDataStoreValue in interface FieldStrategy
      • toKeyDataStoreValue

        public java.lang.Object toKeyDataStoreValue​(java.lang.Object val,
                                                    JDBCStore store)
        Description copied from interface: FieldStrategy
        Translate the given key value to its datastore equivalent. If the mapping occupies multiple columns in the datastore, return an object array, else return a single object. Simply returns the given object by default.
        Specified by:
        toKeyDataStoreValue in interface FieldStrategy
      • appendIsEmpty

        public void appendIsEmpty​(SQLBuffer sql,
                                  Select sel,
                                  Joins joins)
        Description copied from interface: FieldStrategy
        Append a where clause to the given statement checking if this value is empty. Appends impossible-to-satisfy SQL by default.
        Specified by:
        appendIsEmpty in interface FieldStrategy
      • appendIsNotEmpty

        public void appendIsNotEmpty​(SQLBuffer sql,
                                     Select sel,
                                     Joins joins)
        Description copied from interface: FieldStrategy
        Append a where clause to the given statement checking if this value is not empty. Appends always-satisfied SQL by default.
        Specified by:
        appendIsNotEmpty in interface FieldStrategy
      • join

        public Joins join​(Joins joins,
                          boolean forceOuter)
        Description copied from interface: FieldStrategy
        Join this value to the class table. Does nothing by default.
        Specified by:
        join in interface FieldStrategy
      • joinKey

        public Joins joinKey​(Joins joins,
                             boolean forceOuter)
        Description copied from interface: FieldStrategy
        Join the key value to the class table. Does nothing by default.
        Specified by:
        joinKey in interface FieldStrategy
      • joinRelation

        public Joins joinRelation​(Joins joins,
                                  boolean forceOuter,
                                  boolean traverse)
        Description copied from interface: FieldStrategy
        Join this value's table to the table for the related first class object type, if any. Does nothing by default.
        Specified by:
        joinRelation in interface FieldStrategy
        traverse - if true, throw proper exception if it is not possible for this mapping to traverse into the related type
      • joinKeyRelation

        public Joins joinKeyRelation​(Joins joins,
                                     boolean forceOuter,
                                     boolean traverse)
        Description copied from interface: FieldStrategy
        Join this value's table to the table for the related first class object key type, if any. Does nothing by default.
        Specified by:
        joinKeyRelation in interface FieldStrategy
        traverse - if true, throw proper exception if it is not possible for this mapping to traverse into the related type
      • join

        public Joins join​(Joins joins,
                          boolean forceOuter,
                          boolean toMany)
        Joins from the owning class' table to the table where this field lies using the join foreign key. Utility method for use by mapping strategies.
      • isVersionable

        public boolean isVersionable()
        Description copied from interface: FieldStrategy
        Return true if this field can be used as part of a state image for optimistic locking.
        Specified by:
        isVersionable in interface FieldStrategy
      • where

        public void where​(OpenJPAStateManager sm,
                          JDBCStore store,
                          RowManager rm,
                          java.lang.Object prevValue)
                   throws java.sql.SQLException
        Description copied from interface: FieldStrategy
        Add a WHERE condition to the row for this field such that the field's current DB value must equal the given previous value. Only versionable mappings must implement this method meaningfully.
        Specified by:
        where in interface FieldStrategy
        Throws:
        java.sql.SQLException
      • setColumns

        public void setColumns​(Column[] cols)
        Description copied from interface: ValueMapping
        The columns that hold the data for this value.
        Specified by:
        setColumns in interface ValueMapping
      • getColumnIO

        public ColumnIO getColumnIO()
        Description copied from interface: ValueMapping
        I/O information on the foreign key, or columns if this value doesn't have a key.
        Specified by:
        getColumnIO in interface ValueMapping
      • setColumnIO

        public void setColumnIO​(ColumnIO io)
        Description copied from interface: ValueMapping
        I/O information on the foreign key, or columns if this value doesn't have a key.
        Specified by:
        setColumnIO in interface ValueMapping
      • getForeignKey

        public ForeignKey getForeignKey​(ClassMapping target)
        Description copied from interface: ValueMapping
        Return an equivalent of this value's foreign key, but joining to the given target, which may be an unjoined subclass of this value's related type.
        Specified by:
        getForeignKey in interface ValueMapping
      • setForeignKey

        public void setForeignKey​(Row row,
                                  OpenJPAStateManager sm)
                           throws java.sql.SQLException
        Description copied from interface: ValueMapping
        Sets this value's foreign key to the given related object. The object may be null.
        Specified by:
        setForeignKey in interface ValueMapping
        Throws:
        java.sql.SQLException
      • setForeignKey

        public void setForeignKey​(Row row,
                                  OpenJPAStateManager sm,
                                  int targetNumber)
                           throws java.sql.SQLException
        Description copied from interface: ValueMapping
        Sets this value's foreign key to the given related object. The object may be null. If the object is one of2or more foreign keys with the same target, the targetNumber specifies the one to set.
        Specified by:
        setForeignKey in interface ValueMapping
        Throws:
        java.sql.SQLException
      • whereForeignKey

        public void whereForeignKey​(Row row,
                                    OpenJPAStateManager sm)
                             throws java.sql.SQLException
        Description copied from interface: ValueMapping
        Sets this value's foreign key to the given related object. The object may be null.
        Specified by:
        whereForeignKey in interface ValueMapping
        Throws:
        java.sql.SQLException
      • getIndependentTypeMappings

        public ClassMapping[] getIndependentTypeMappings()
        Description copied from interface: ValueMapping
        Return all independently-mapped joinable types for this value, depending on whether this value is polymorphic and how the related type is mapped. Return an empty array if value type is not PC.
        Specified by:
        getIndependentTypeMappings in interface ValueMapping
      • getSelectSubclasses

        public int getSelectSubclasses()
        Description copied from interface: ValueMapping
        Return the org.apache.openjpa.sql.Select subclasses constant for loading this relation, based on how the related type is mapped, whether this relation is polymorphic, and whether it is configured to use class criteria.
        Specified by:
        getSelectSubclasses in interface ValueMapping
      • setValueUnique

        public void setValueUnique​(Unique unq)
        Description copied from interface: ValueMapping
        Unique constraint on this value's columns, or null if none.
        Specified by:
        setValueUnique in interface ValueMapping
      • setValueIndex

        public void setValueIndex​(Index idx)
        Description copied from interface: ValueMapping
        Index on this value's columns, or null if none.
        Specified by:
        setValueIndex in interface ValueMapping
      • getUseClassCriteria

        public boolean getUseClassCriteria()
        Description copied from interface: ValueMapping
        Whether to use class criteria when joining to related type.
        Specified by:
        getUseClassCriteria in interface ValueMapping
      • setUseClassCriteria

        public void setUseClassCriteria​(boolean criteria)
        Description copied from interface: ValueMapping
        Whether to use class criteria when joining to related type.
        Specified by:
        setUseClassCriteria in interface ValueMapping
      • getPolymorphic

        public int getPolymorphic()
        Description copied from interface: ValueMapping
        The degree to which this relation is polymorphic.
        Specified by:
        getPolymorphic in interface ValueMapping
      • setPolymorphic

        public void setPolymorphic​(int poly)
        Description copied from interface: ValueMapping
        The degree to which this relation is polymorphic.
        Specified by:
        setPolymorphic in interface ValueMapping
      • mapConstraints

        @Deprecated
        public void mapConstraints​(java.lang.String name,
                                   boolean adapt)
        Deprecated.
        Description copied from interface: ValueMapping
        Map indexes and constraints for this value, using the current ValueMappingInfo. The foreign key or columns of this value must be set before calling this method.
        Specified by:
        mapConstraints in interface ValueMapping
      • mapConstraints

        public void mapConstraints​(DBIdentifier name,
                                   boolean adapt)
        Description copied from interface: ValueMapping
        Map indexes and constraints for this value, using the current ValueMappingInfo. The foreign key or columns of this value must be set before calling this method.
        Specified by:
        mapConstraints in interface ValueMapping
      • isBidirectionalJoinTableMappingOwner

        public boolean isBidirectionalJoinTableMappingOwner()
        Affirms if this field is the owning side of a bidirectional relation with a join table. Evaluated only once and the result cached for subsequent call. Hence must be called after resolution.
      • isBidirectionalJoinTableMappingNonOwner

        public boolean isBidirectionalJoinTableMappingNonOwner()
        Affirms if this field is the non-owning side of a bidirectional relation with a join table. Evaluated only once and the result cached for subsequent call. Hence must be called after resolution.
      • isBiMTo1JT

        public boolean isBiMTo1JT()
      • isUni1ToMFK

        public boolean isUni1ToMFK()
      • isUniMTo1JT

        public boolean isUniMTo1JT()
      • isUni1To1JT

        public boolean isUni1To1JT()
      • isBi1To1JT

        public boolean isBi1To1JT()
      • getBi_1ToM_JTField

        public FieldMapping getBi_1ToM_JTField()
      • getBi_MTo1_JTField

        public FieldMapping getBi_MTo1_JTField()
      • getBi1ToMJoinFK

        public ForeignKey getBi1ToMJoinFK()
      • getBi1ToMElemFK

        public ForeignKey getBi1ToMElemFK()
      • setBi1MJoinTableInfo

        public void setBi1MJoinTableInfo()
      • isNonDefaultMappingUsingJoinTableStrategy

        public boolean isNonDefaultMappingUsingJoinTableStrategy()
      • setMapsIdCols

        public void setMapsIdCols​(boolean hasMapsIdCols)
      • hasMapsIdCols

        public boolean hasMapsIdCols()