- 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:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.eclipse.persistence.descriptors.CMPPolicy
CMPPolicy.KeyElementAccessor, CMPPolicy.KeyIsElementAccessor
-
-
Field Summary
Fields Modifier and Type Field Description protected HashMap<DatabaseField,CMPPolicy.KeyElementAccessor>fieldToAccessorMapUsed to look up the KeyElementAccessor for a specific DatabaseField, used for resolving DerivedIdsprotected CMPPolicy.KeyElementAccessor[]keyClassFieldsStores the fields for this classes compound primary key class if required.protected Class<?>pkClassprotected StringpkClassName-
Fields inherited from class org.eclipse.persistence.descriptors.CMPPolicy
AFTER_EJBCREATE, AFTER_EJBPOSTCREATE, ALL_MODIFICATIONS, descriptor, forceUpdate, mappedClass, modificationDeferralLevel, nonDeferredCreateTime, NONE, pessimisticLockingPolicy, UNDEFINED, UPDATE_MODIFICATIONS, updateAllFields
-
-
Constructor Summary
Constructors Constructor Description CMP3Policy()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddReadOnlyMappings(ClassDescriptor aDescriptor, DatabaseField field, List allMappings)INTERNAL: Add the writable mapping for the given field to the allMappings list.protected voidaddWritableMapping(ClassDescriptor aDescriptor, DatabaseField field, List allMappings)INTERNAL: Add the read only mappings for the given field to the allMappings list.CMP3Policyclone()INTERNAL: Clone the CMP3PolicyvoidconvertClassNamesToClasses(ClassLoader classLoader)INTERNAL: Convert all the class-name-based settings in this object to actual class-based settings.ObjectcreateBeanUsingKey(Object key, AbstractSession session)INTERNAL: Use the key to create a bean and initialize its primary key fields.ObjectcreatePrimaryKeyFromId(Object key, AbstractSession session)INTERNAL: Use the key to create a EclipseLink primary key.protected FieldgetField(Class<?> cls, String fieldName)INTERNAL:protected CMPPolicy.KeyElementAccessor[]getKeyClassFields()INTERNAL:<T> Class<T>getPKClass()INTERNAL: Return the java Class representing the primary key class nameObjectgetPKClassInstance()INTERNAL:StringgetPKClassName()INTERNAL:ObjectgetPkValueFromKeyForField(Object key, DatabaseField field, AbstractSession session)INTERNAL: Pull the value for the field from the key.voidinitialize(ClassDescriptor descriptor, AbstractSession session)INTERNAL: Initialize the CMPPolicy settings.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.booleanisCMP3Policy()INTERNAL: Return if this policy is for CMP3.voidremoteInitialize(ClassDescriptor descriptor, AbstractSession session)INTERNAL: Initialize the CMPPolicy settings for remote sessions.voidsetPKClass(Class<?> pkClass)ADVANCED:voidsetPrimaryKeyClassName(String pkClassName)INTERNAL:-
Methods inherited from class org.eclipse.persistence.descriptors.CMPPolicy
createPrimaryKeyInstance, createPrimaryKeyInstanceFromId, createPrimaryKeyInstanceFromPrimaryKeyValues, getClassInstance, getDeferModificationsUntilCommit, getDescriptor, getForceUpdate, getMappedClass, getNonDeferredCreateTime, getPessimisticLockingPolicy, getUpdateAllFields, hasPessimisticLockingPolicy, internalGetForceUpdate, internalGetUpdateAllFields, internalSetForceUpdate, internalSetUpdateAllFields, isSingleKey, setDeferModificationsUntilCommit, setDescriptor, setFieldValue, setForceUpdate, setMappedClass, setNonDeferredCreateTime, setPessimisticLockingPolicy, setUpdateAllFields
-
-
-
-
Field Detail
-
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
-
-
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.
-
clone
public CMP3Policy clone()
INTERNAL: Clone the CMP3Policy
-
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:
convertClassNamesToClassesin classCMPPolicy
-
isCMP3Policy
public boolean isCMP3Policy()
INTERNAL: Return if this policy is for CMP3.- Overrides:
isCMP3Policyin classCMPPolicy
-
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:
getPKClassin classCMPPolicy
-
setPKClass
public void setPKClass(Class<?> pkClass)
ADVANCED:
-
getPKClassName
public String getPKClassName()
INTERNAL:
-
getPKClassInstance
public Object getPKClassInstance()
INTERNAL:- Overrides:
getPKClassInstancein classCMPPolicy
-
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:
createPrimaryKeyFromIdin classCMPPolicy
-
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:
createBeanUsingKeyin classCMPPolicy- 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:
getKeyClassFieldsin classCMPPolicy- 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 fieldfield- 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:
initializein classCMPPolicy- Throws:
DescriptorException
-
remoteInitialize
public void remoteInitialize(ClassDescriptor descriptor, AbstractSession session) throws DescriptorException
INTERNAL: Initialize the CMPPolicy settings for remote sessions.- Overrides:
remoteInitializein classCMPPolicy- Throws:
DescriptorException
-
-