类 MergeContext

  • 所有已实现的接口:
    Map

    public class MergeContext
    extends Object
    implements Map
    MergeContext is a Map implementation that is intended to be used by a merge event listener to keep track of each entity being merged and their corresponding managed result. Entities to be merged may to be added to the MergeContext before the merge operation has cascaded to that entity. "Merge entity" and "mergeEntity" method parameter refer to an entity that is (or will be) merged via Session.merge(Object mergeEntity). "Managed entity" and "managedEntity" method parameter refer to the managed entity that is the result of merging an entity. A merge entity can be transient, detached, or managed. If it is managed, then it must be the same as its associated entity result. If put(Object mergeEntity, Object managedEntity) is called, and this MergeContext already contains an entry with a different entity as the key, but with the same (managedEntity) value, this means that multiple entity representations for the same persistent entity are being merged. If this happens, EntityCopyObserver.entityCopyDetected( Object managedEntity, Object mergeEntity1, Object mergeEntity2, org.hibernate.event.spi.EventSource) will be called. It is up to that method to determine the property course of action for this situation. There are several restrictions.

    The following method is intended to be used by a merge event listener (and other classes) in the same package to add a merge entity and its corresponding managed entity to a MergeContext and indicate if the merge operation is being performed on the merge entity yet.

    put(Object mergeEntity, Object managedEntity, boolean isOperatedOn)

    The following method is intended to be used by a merge event listener (and other classes) in the same package to indicate whether the merge operation is being performed on a merge entity already in the MergeContext: setOperatedOn(Object mergeEntity, boolean isOperatedOn)

    作者:
    Gail Badner
    • 方法详细资料

      • clear

        public void clear()
        Clears the MergeContext.
        指定者:
        clear 在接口中 Map
      • containsKey

        public boolean containsKey​(Object mergeEntity)
        Returns true if this MergeContext contains a cross-reference for the specified merge entity to a managed entity result.
        指定者:
        containsKey 在接口中 Map
        参数:
        mergeEntity - must be non-null
        返回:
        true if this MergeContext contains a cross-reference for the specified merge entity
        抛出:
        NullPointerException - if mergeEntity is null
      • containsValue

        public boolean containsValue​(Object managedEntity)
        Returns true if this MergeContext contains a cross-reference from the specified managed entity to a merge entity.
        指定者:
        containsValue 在接口中 Map
        参数:
        managedEntity - must be non-null
        返回:
        true if this MergeContext contains a cross-reference from the specified managed entity to a merge entity
        抛出:
        NullPointerException - if managedEntity is null
      • entrySet

        public Set entrySet()
        Returns an unmodifiable set view of the merge-to-managed entity cross-references contained in this MergeContext.
        指定者:
        entrySet 在接口中 Map
        返回:
        an unmodifiable set view of the merge-to-managed entity cross-references contained in this MergeContext
      • get

        public Object get​(Object mergeEntity)
        Returns the managed entity associated with the specified merge Entity.
        指定者:
        get 在接口中 Map
        参数:
        mergeEntity - the merge entity; must be non-null
        返回:
        the managed entity associated with the specified merge Entity
        抛出:
        NullPointerException - if mergeEntity is null
      • isEmpty

        public boolean isEmpty()
        Returns true if this MergeContext contains no merge-to-managed entity cross-references.
        指定者:
        isEmpty 在接口中 Map
        返回:
        true if this MergeContext contains no merge-to-managed entity cross-references.
      • keySet

        public Set keySet()
        Returns an unmodifiable set view of the merge entities contained in this MergeContext
        指定者:
        keySet 在接口中 Map
        返回:
        an unmodifiable set view of the merge entities contained in this MergeContext
      • put

        public Object put​(Object mergeEntity,
                          Object managedEntity)
        Associates the specified merge entity with the specified managed entity result in this MergeContext. If this MergeContext already contains a cross-reference for mergeEntity when this method is called, then managedEntity must be the same as what is already associated with mergeEntity.

        This method assumes that the merge process is not yet operating on mergeEntity. Later when mergeEntity enters the merge process, setOperatedOn(Object, boolean) should be called.

        指定者:
        put 在接口中 Map
        参数:
        mergeEntity - the merge entity; must be non-null
        managedEntity - the managed entity result; must be non-null
        返回:
        previous managed entity associated with specified merge entity, or null if there was no mapping for mergeEntity.
        抛出:
        NullPointerException - if mergeEntity or managedEntity is null
        IllegalArgumentException - if managedEntity is not the same as the previous managed entity associated with merge entity
        IllegalStateException - if internal cross-references are out of sync,
      • put

        public Object put​(Object mergeEntity,
                          Object managedEntity,
                          boolean isOperatedOn)
        Associates the specified merge entity with the specified managed entity in this MergeContext. If this MergeContext already contains a cross-reference for mergeEntity when this method is called, then managedEntity must be the same as what is already associated with mergeEntity.
        参数:
        mergeEntity - the merge entity; must be non-null
        managedEntity - the managed entity; must be non-null
        isOperatedOn - indicates if the merge operation is performed on the mergeEntity.
        返回:
        previous managed entity associated with specified merge entity, or null if there was no mapping for mergeEntity.
        抛出:
        NullPointerException - if mergeEntity or managedEntity is null
        IllegalArgumentException - if managedEntity is not the same as the previous managed entity associated with mergeEntity
        IllegalStateException - if internal cross-references are out of sync,
      • putAll

        public void putAll​(Map map)
        Copies all of the mappings from the specified Map to this MergeContext. The key and value for each entry in map is subject to the same restrictions as put(Object mergeEntity, Object managedEntity). This method assumes that the merge process is not yet operating on any merge entity
        指定者:
        putAll 在接口中 Map
        参数:
        map - keys and values must be non-null
        抛出:
        NullPointerException - if any key or value is null
        IllegalArgumentException - if a key in map was already in this MergeContext but associated value in map is different from the previous value in this MergeContext.
        IllegalStateException - if internal cross-references are out of sync,
      • size

        public int size()
        Returns the number of merge-to-managed entity cross-references in this MergeContext
        指定者:
        size 在接口中 Map
        返回:
        the number of merge-to-managed entity cross-references in this MergeContext
      • values

        public Collection values()
        Returns an unmodifiable Set view of managed entities contained in this MergeContext.
        指定者:
        values 在接口中 Map
        返回:
        an unmodifiable Set view of managed entities contained in this MergeContext
      • isOperatedOn

        public boolean isOperatedOn​(Object mergeEntity)
        Returns true if the listener is performing the merge operation on the specified merge entity.
        参数:
        mergeEntity - the merge entity; must be non-null
        返回:
        true if the listener is performing the merge operation on the specified merge entity; false, if there is no mapping for mergeEntity.
        抛出:
        NullPointerException - if mergeEntity is null
      • setOperatedOn

        public void setOperatedOn​(Object mergeEntity,
                                  boolean isOperatedOn)
        Set flag to indicate if the listener is performing the merge operation on the specified merge entity.
        参数:
        mergeEntity - must be non-null and this MergeContext must contain a cross-reference for mergeEntity to a managed entity
        抛出:
        NullPointerException - if mergeEntity is null
        IllegalStateException - if this MergeContext does not contain a a cross-reference for mergeEntity
      • invertMap

        public Map invertMap()
        Returns an unmodifiable map view of the managed-to-merge entity cross-references. The returned Map will contain a cross-reference from each managed entity to the most recently associated merge entity that was most recently put in the MergeContext.
        返回:
        an unmodifiable map view of the managed-to-merge entity cross-references.