Class ReturningPolicy

java.lang.Object
org.eclipse.persistence.descriptors.ReturningPolicy
All Implemented Interfaces:
Serializable, Cloneable

public class ReturningPolicy extends Object implements Serializable, Cloneable

Purpose: Allows for INSERT or UPDATE operations to return values back into the object being written. This allows for table default values, trigger or stored procedures computed values to be set back into the object. This can be used with generated SQL on the Oracle platform using the RETURNING clause, or through stored procedures on other platforms.

See Also:
  • Field Details

    • INSERT

      protected static final int INSERT
      See Also:
    • UPDATE

      protected static final int UPDATE
      See Also:
    • NUM_OPERATIONS

      protected static final int NUM_OPERATIONS
      See Also:
    • RETURN_ONLY

      protected static final int RETURN_ONLY
      See Also:
    • WRITE_RETURN

      protected static final int WRITE_RETURN
      See Also:
    • MAPPED

      protected static final int MAPPED
      See Also:
    • UNMAPPED

      protected static final int UNMAPPED
      See Also:
    • ALL

      protected static final int ALL
      See Also:
    • MAIN_SIZE

      protected static final int MAIN_SIZE
      See Also:
    • descriptor

      protected ClassDescriptor descriptor
      owner of the policy
    • infos

      protected List<ReturningPolicy.Info> infos
      Stores an object of type Info for every call to any of addField.. methods. Should be filled out before initialize() is called: fields added after initialization are ignored.
    • main

      protected Collection<org.eclipse.persistence.internal.helper.DatabaseField>[][] main
      The following attributes are initialized by initialize() method. Contains the actual DatabaseFields to be returned. Populated during descriptor initialization using infos. Here's the order:
       main[INSERT][RETURN_ONLY]  main[INSERT][WRITE_RETURN]  main[INSERT][MAPPED]    main[INSERT][UNMAPPED]    main[INSERT][ALL]
       main[UPDATE][RETURN_ONLY]  main[UPDATE][WRITE_RETURN]  main[UPDATE][MAPPED]    main[UPDATE][UNMAPPED]    main[UPDATE][ALL]
       
      After initialization main[UPDATE,WRITE_RETURN] will contain all DatabaseFields that should be returned on Update as read-write.
       main[i][RETURN_ONLY] + main[i][WRITE_RETURN] = main[i][MAPPED]
       main[i][MAPPED] + main[i][UNMAPPED] = main[i][ALL]
       
    • tableToFieldsForGenerationMap

      protected Map<org.eclipse.persistence.internal.helper.DatabaseTable,Vector<org.eclipse.persistence.internal.helper.DatabaseField>>[] tableToFieldsForGenerationMap
      maps ClassDescriptor's tables into Vectors of fields to be used for call generation. Lazily initialized array [NUM_OPERATIONS]
    • isUsedToSetPrimaryKey

      protected boolean isUsedToSetPrimaryKey
      indicates whether ReturningPolicy is used for generation of the PK.
    • fieldsNotFromDescriptor_DefaultTable

      protected Map<org.eclipse.persistence.internal.helper.DatabaseField,org.eclipse.persistence.internal.helper.DatabaseField> fieldsNotFromDescriptor_DefaultTable
      contains all default table the returning fields that are either unmapped or mapped supplied with types.
    • fieldsNotFromDescriptor_OtherTables

      protected Map<org.eclipse.persistence.internal.helper.DatabaseField,org.eclipse.persistence.internal.helper.DatabaseField> fieldsNotFromDescriptor_OtherTables
      contains all the other tables returning fields that are either unmapped or mapped supplied with types.
  • Constructor Details

    • ReturningPolicy

      public ReturningPolicy()
  • Method Details

    • getDescriptor

      public ClassDescriptor getDescriptor()
      PUBLIC: Return the owner of the policy.
    • fieldIsNotFromDescriptor

      protected void fieldIsNotFromDescriptor(org.eclipse.persistence.internal.helper.DatabaseField field)
      INTERNAL:
    • getFieldsToGenerateInsert

      public Vector getFieldsToGenerateInsert(org.eclipse.persistence.internal.helper.DatabaseTable table)
      INTERNAL:
    • getFieldsToGenerateUpdate

      public Vector getFieldsToGenerateUpdate(org.eclipse.persistence.internal.helper.DatabaseTable table)
      INTERNAL:
    • getFieldInfos

      public List<ReturningPolicy.Info> getFieldInfos()
      INTERNAL:
    • setFieldInfos

      public void setFieldInfos(List<ReturningPolicy.Info> infos)
      INTERNAL:
    • hasEqualFieldInfos

      public boolean hasEqualFieldInfos(ReturningPolicy returningPolicyToCompare)
      INTERNAL: Used for testing only
    • hasEqualFieldInfos

      public boolean hasEqualFieldInfos(List<ReturningPolicy.Info> infosToCompare)
      INTERNAL: Used for testing only
    • areCollectionsEqualAsSets

      public static boolean areCollectionsEqualAsSets(Collection col1, Collection col2)
      INTERNAL: Compares two Collections as sets (ignoring the order of the elements). Note that the passed Collections are cloned. Used for testing only.
    • getVectorOfFieldsToGenerate

      protected Vector<org.eclipse.persistence.internal.helper.DatabaseField> getVectorOfFieldsToGenerate(int operation, org.eclipse.persistence.internal.helper.DatabaseTable table)
      INTERNAL:
    • getFieldsToMergeInsert

      public Collection<org.eclipse.persistence.internal.helper.DatabaseField> getFieldsToMergeInsert()
      INTERNAL:
    • getFieldsToMergeUpdate

      public Collection<org.eclipse.persistence.internal.helper.DatabaseField> getFieldsToMergeUpdate()
      INTERNAL:
    • clone

      public Object clone()
      INTERNAL: Normally cloned when not yet initialized. If initialized ReturningPolicy cloned then the clone should be re-initialized.
      Overrides:
      clone in class Object
    • setDescriptor

      public void setDescriptor(ClassDescriptor descriptor)
      INTERNAL:
    • addFieldForInsert

      public void addFieldForInsert(String qualifiedName)
      PUBLIC: Define that the field will be returned from an insert operation.
    • addFieldForInsert

      public void addFieldForInsert(String qualifiedName, Class type)
      PUBLIC: Define that the field will be returned from an insert operation. The type may be required to bind the output parameter if not known by the mapping.
    • addFieldForInsert

      public void addFieldForInsert(org.eclipse.persistence.internal.helper.DatabaseField field)
      PUBLIC: Define that the field will be returned from an insert operation.
    • addFieldForInsertReturnOnly

      public void addFieldForInsertReturnOnly(String qualifiedName)
      PUBLIC: Define that the field will be returned from an insert operation. A field added with addFieldForInsertReturnOnly method is excluded from INSERT clause during SQL generation.
    • addFieldForInsertReturnOnly

      public void addFieldForInsertReturnOnly(String qualifiedName, Class type)
      PUBLIC: Define that the field will be returned from an insert operation. A field added with addFieldForInsertReturnOnly method is excluded from INSERT clause during SQL generation. The type may be required to bind the output parameter if not known by the mapping.
    • addFieldForInsertReturnOnly

      public void addFieldForInsertReturnOnly(org.eclipse.persistence.internal.helper.DatabaseField field)
      PUBLIC: Define that the field will be returned from an insert operation. A field added with addFieldForInsertReturnOnly method is excluded from INSERT clause during SQL generation.
    • addFieldForUpdate

      public void addFieldForUpdate(String qualifiedName)
      PUBLIC: Define that the field will be returned from an update operation.
    • addFieldForUpdate

      public void addFieldForUpdate(String qualifiedName, Class type)
      PUBLIC: Define that the field will be returned from an update operation. The type may be required to bind the output parameter if not known by the mapping.
    • addFieldForUpdate

      public void addFieldForUpdate(org.eclipse.persistence.internal.helper.DatabaseField field)
      PUBLIC: Define that the field will be returned from an update operation.
    • addField

      protected void addField(org.eclipse.persistence.internal.helper.DatabaseField field, boolean isInsert, boolean isInsertModeReturnOnly, boolean isUpdate)
      INTERNAL:
    • isThereATypeConflict

      protected static boolean isThereATypeConflict(org.eclipse.persistence.internal.helper.DatabaseField field1, org.eclipse.persistence.internal.helper.DatabaseField field2)
      INTERNAL:
    • createField

      protected org.eclipse.persistence.internal.helper.DatabaseField createField(String qualifiedName, Class type)
      INTERNAL:
    • createCollection

      protected Collection createCollection()
      INTERNAL:
    • addFieldToMain

      protected void addFieldToMain(int operation, int state, org.eclipse.persistence.internal.helper.DatabaseField field)
    • addCollectionToMain

      protected void addCollectionToMain(int operation, int state, Collection collection)
    • addMappedFieldToMain

      protected void addMappedFieldToMain(org.eclipse.persistence.internal.helper.DatabaseField field, ReturningPolicy.Info info)
    • addUnmappedFieldToMain

      protected void addUnmappedFieldToMain(org.eclipse.persistence.internal.helper.DatabaseField field, ReturningPolicy.Info info)
    • removeDuplicateAndValidateInfos

      protected Hashtable removeDuplicateAndValidateInfos(org.eclipse.persistence.internal.sessions.AbstractSession session)
    • initialize

      public void initialize(org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL:
    • copyMainFrom

      protected void copyMainFrom(ReturningPolicy policy)
    • hasEqualMains

      public boolean hasEqualMains(ReturningPolicy policy)
      INTERNAL: Both ReturningPolicies should be initialized
    • trimModifyRowForInsert

      public void trimModifyRowForInsert(org.eclipse.persistence.internal.sessions.AbstractRecord modifyRow)
      INTERNAL:
    • trimModifyRow

      protected void trimModifyRow(org.eclipse.persistence.internal.sessions.AbstractRecord modifyRow, int operation)
    • isUsedToSetPrimaryKey

      public boolean isUsedToSetPrimaryKey()
      PUBLIC:
    • clearInitialization

      protected void clearInitialization()
    • initializeIsUsedToSetPrimaryKey

      protected void initializeIsUsedToSetPrimaryKey()
    • verifyFieldAndMapping

      protected boolean verifyFieldAndMapping(org.eclipse.persistence.internal.sessions.AbstractSession session, org.eclipse.persistence.internal.helper.DatabaseField field)
    • verifyFieldAndMapping

      protected static boolean verifyFieldAndMapping(org.eclipse.persistence.internal.sessions.AbstractSession session, org.eclipse.persistence.internal.helper.DatabaseField field, ClassDescriptor descriptor, DatabaseMapping mapping)
    • verifyField

      protected static boolean verifyField(org.eclipse.persistence.internal.sessions.AbstractSession session, org.eclipse.persistence.internal.helper.DatabaseField field, ClassDescriptor descriptor)
    • validationAfterDescriptorInitialization

      public void validationAfterDescriptorInitialization(org.eclipse.persistence.internal.sessions.AbstractSession session)
      INTERNAL:
    • getField

      public org.eclipse.persistence.internal.helper.DatabaseField getField(org.eclipse.persistence.internal.helper.DatabaseField field)
      INTERNAL: Returns an equal field held by ReturningPolicy, or null.