java.lang.Object
org.eclipse.persistence.descriptors.CMPPolicy
org.eclipse.persistence.internal.jpa.CMP3Policy
All Implemented Interfaces:
Serializable, Cloneable
Direct Known Subclasses:
DynamicIdentityPolicy

public class CMP3Policy extends CMPPolicy
Defines primary key extraction code for use in JPA. A descriptor should have a CMP3Policy attached to handle basic Id as well as IdClass/EmbeddedId usage.
Since:
TopLink 10.1.3
See Also:
  • Field Details

    • keyClassFields

      protected transient CMPPolicy.KeyElementAccessor[] keyClassFields
      Stores the fields for this classes compound primary key class if required.
    • fieldToAccessorMap

      protected transient HashMap<DatabaseField,CMPPolicy.KeyElementAccessor> fieldToAccessorMap
      Used to look up the KeyElementAccessor for a specific DatabaseField, used for resolving DerivedIds
    • pkClassName

      protected String pkClassName
    • pkClass

      protected Class<?> pkClass
  • Constructor Details

    • CMP3Policy

      public CMP3Policy()
  • Method Details

    • addWritableMapping

      protected void addWritableMapping(ClassDescriptor aDescriptor, DatabaseField field, List allMappings)
      INTERNAL: Add the read only mappings for the given field to the allMappings list.
    • addReadOnlyMappings

      protected void addReadOnlyMappings(ClassDescriptor aDescriptor, DatabaseField field, List allMappings)
      INTERNAL: Add the writable mapping for the given field to the allMappings list.
    • clone

      public CMP3Policy clone()
      INTERNAL: Clone the CMP3Policy
      Overrides:
      clone in class CMPPolicy
    • convertClassNamesToClasses

      public void convertClassNamesToClasses(ClassLoader classLoader)
      INTERNAL: Convert all the class-name-based settings in this object to actual class-based settings. This method is used when converting a project that has been built with class names to a project with classes.
      Overrides:
      convertClassNamesToClasses in class CMPPolicy
    • isCMP3Policy

      public boolean isCMP3Policy()
      INTERNAL: Return if this policy is for CMP3.
      Overrides:
      isCMP3Policy in class CMPPolicy
    • setPrimaryKeyClassName

      public void setPrimaryKeyClassName(String pkClassName)
      INTERNAL:
    • getPKClass

      public <T> Class<T> getPKClass()
      INTERNAL: Return the java Class representing the primary key class name
      Overrides:
      getPKClass in class CMPPolicy
    • setPKClass

      public void setPKClass(Class<?> pkClass)
      ADVANCED:
    • getPKClassName

      public String getPKClassName()
      INTERNAL:
    • getPKClassInstance

      public Object getPKClassInstance()
      INTERNAL:
      Overrides:
      getPKClassInstance in class CMPPolicy
    • createPrimaryKeyFromId

      public Object createPrimaryKeyFromId(Object key, AbstractSession session)
      INTERNAL: Use the key to create a EclipseLink primary key. If the key is simple (direct mapped) then just add it to a vector, otherwise must go through the inefficient process of copying the key into the bean and extracting the key from the bean.
      Overrides:
      createPrimaryKeyFromId in class CMPPolicy
    • getField

      protected Field getField(Class<?> cls, String fieldName) throws NoSuchFieldException
      INTERNAL:
      Returns:
      the field from the class with name equal to fieldName.
      Throws:
      NoSuchFieldException
    • createBeanUsingKey

      public Object createBeanUsingKey(Object key, AbstractSession session)
      INTERNAL: Use the key to create a bean and initialize its primary key fields. Note: If is a compound PK then a primary key object is being used. This method should only be used for 'templates' when executing queries. The bean built will not be given an EntityContext and should not be used as an actual entity bean.
      Overrides:
      createBeanUsingKey in class CMPPolicy
      Parameters:
      key - Object the primary key to use for initializing the bean's corresponding pk fields
      Returns:
      Object
    • initializePrimaryKeyFields

      protected CMPPolicy.KeyElementAccessor[] initializePrimaryKeyFields(Class<?> keyClass, AbstractSession session)
      INTERNAL: Cache the bean's primary key fields so speed up creating of primary key objects and initialization of beans. Note, we have to re-look up the fields for the bean class since these fields may have been loaded with the wrong loader (thank you Kirk). If the key is compound, we also have to look up the fields for the key.
    • getKeyClassFields

      protected CMPPolicy.KeyElementAccessor[] getKeyClassFields()
      INTERNAL:
      Overrides:
      getKeyClassFields in class CMPPolicy
      Returns:
      Returns the keyClassFields.
    • getPkValueFromKeyForField

      public Object getPkValueFromKeyForField(Object key, DatabaseField field, AbstractSession session)
      INTERNAL: Pull the value for the field from the key.
      Parameters:
      key - Object the primary key to use to get the value for the field
      field - DatabaseField the field to find a value for
      Returns:
      Object
    • initialize

      public void initialize(ClassDescriptor descriptor, AbstractSession session) throws DescriptorException
      INTERNAL: Initialize the CMPPolicy settings.
      Overrides:
      initialize in class CMPPolicy
      Throws:
      DescriptorException
    • remoteInitialize

      public void remoteInitialize(ClassDescriptor descriptor, AbstractSession session) throws DescriptorException
      INTERNAL: Initialize the CMPPolicy settings for remote sessions.
      Overrides:
      remoteInitialize in class CMPPolicy
      Throws:
      DescriptorException