Class CollectionTable

  • All Implemented Interfaces:
    Table, org.datanucleus.store.schema.table.Table

    public class CollectionTable
    extends ElementContainerTable
    Representation of a join table for a Collection. A Collection covers a wide range of possibilities in terms of whether it allows duplicates or not, whether it allows nulls or not, whether it supports ordering via indexes, whether it supports ordering via a SELECT criteria, etc. Consequently the join table can vary depending on the required capabilities.

    JoinTable Mappings

    The join table consists of the following mappings :-

    • ownerMapping linking back to the owning class with the Collection.
    • elementMapping either being an FK link to the element table or being an embedded/serialised element stored wholly in this table.
    • orderMapping which may be null, or otherwise stores an index for the elements. This is either to provide uniqueness or ordering in a List (and part of the PK).
    Note that with an M-N relation there will be 2 instances of the CollectionTable - one represents the relation from owner to element, and the other for the relation from element to owner.
    • Constructor Detail

      • CollectionTable

        public CollectionTable​(Table ownerTable,
                               DatastoreIdentifier tableName,
                               org.datanucleus.metadata.AbstractMemberMetaData mmd,
                               RDBMSStoreManager storeMgr)
        Constructor.
        Parameters:
        ownerTable - Table of the owner of this member
        tableName - Identifier name of the table
        mmd - MetaData for the member of the owner
        storeMgr - The Store Manager managing these tables.
    • Method Detail

      • initialize

        public void initialize​(org.datanucleus.ClassLoaderResolver clr)
        Method to initialise the table definition.
        Specified by:
        initialize in interface Table
        Overrides:
        initialize in class ElementContainerTable
        Parameters:
        clr - The ClassLoaderResolver
      • getElementType

        public String getElementType()
        Accessor for the element type stored in this Collection/Set/List.
        Specified by:
        getElementType in class ElementContainerTable
        Returns:
        Name of element type.
      • isSerialisedElement

        public boolean isSerialisedElement()
        Accessor for whether the element is serialised into this table. This can be a serialised persistable, or a serialised simple type
        Returns:
        Whether the element is serialised.
      • isEmbeddedElement

        public boolean isEmbeddedElement()
        Accessor for whether the element is embedded into this table. This can be an embedded persistable, or an embedded simple type
        Returns:
        Whether the element is embedded.
      • isSerialisedElementPC

        public boolean isSerialisedElementPC()
        Accessor for whether the element is a persistable(serialised)
        Returns:
        Whether the element is PC and is serialised
      • isEmbeddedElementPC

        public boolean isEmbeddedElementPC()
        Accessor for whether the element is a persistable(embedded). Currently this only defines a PC element as embedded if the MetaData has an <embedded> block. This may or may not be correct depending on how you interpret the JDO2 spec "embedded-element" flag.
        Returns:
        Whether the element is PC and is embedded
      • requiresPrimaryKey

        protected boolean requiresPrimaryKey()
        Convenience method for whether a PK is required for the join table. Extends JoinTable allowing for "ordered List" case which do not require a primary key (so we can have duplicates).
        Overrides:
        requiresPrimaryKey in class JoinTable
        Returns:
        Whether a PK is required