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 Details

    • 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 Details

    • 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