Class 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:
    Serialized Form
    • Field Detail

      • keyClassFields

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

        protected String pkClassName
      • pkClass

        protected Class<?> pkClass
    • Constructor Detail

      • CMP3Policy

        public CMP3Policy()
    • Method Detail

      • 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.
      • 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:
      • 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
      • 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.
      • 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