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

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

      • ReturningPolicy

        public ReturningPolicy()
    • Method Detail

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