## org.hibernate.type
Class AbstractType

    java.lang.Object
      org.hibernate.type.AbstractType

All Implemented Interfaces:
  Serializable, Type

Direct Known Subclasses:
  AbstractLobType, AnyType, CollectionType, ComponentType, CompositeCustomType, CustomType, DiscriminatorType, EntityType, MetaType, NullableType

    public abstract class AbstractType

extends Object
implements Type

Abstract superclass of the built in Type hierarchy.

Author:
  Gavin King
See Also:
  Serialized Form

Constructor Summary
`AbstractType()`

Method Summary
`Object` `assemble(Serializable cached, SessionImplementor session, Object owner)` Reconstruct the object from its cached "disassembled" state.
`void` `beforeAssemble(Serializable cached, SessionImplementor session)` Called before assembling a query result set from the query cache, to allow batch fetching of entities missing from the second-level cache.
`int` `compare(Object x, Object y, EntityMode entityMode)` Perform a `Comparator` style comparison between values
`Serializable` `disassemble(Object value, SessionImplementor session, Object owner)` Return a cacheable "disassembled" representation of the object.
`int` `getHashCode(Object x, EntityMode entityMode)` Get a hash code, consistent with persistence "equality".
`int` `getHashCode(Object x, EntityMode entityMode, SessionFactoryImplementor factory)` Get a hash code, consistent with persistence "equality".
`Type` `getSemiResolvedType(SessionFactoryImplementor factory)` Get the type of a semi-resolved value.
`Object` `hydrate(ResultSet rs, String[] names, SessionImplementor session, Object owner)` Retrieve an instance of the mapped class, or the identifier of an entity or collection, from a JDBC resultset.
`boolean` `isAnyType()` Return true if the implementation is castable to `AnyType`.
`boolean` `isAssociationType()` Return true if the implementation is castable to `AssociationType`.
`boolean` `isCollectionType()` Return true if the implementation is castable to `CollectionType`.
`boolean` `isComponentType()` Return true if the implementation is castable to `CompositeType`.
`boolean` `isDirty(Object old, Object current, SessionImplementor session)` Should the parent be considered dirty, given both the old and current value?
`boolean` `isEntityType()` Return true if the implementation is castable to `EntityType`.
`boolean` `isEqual(Object x, Object y, EntityMode entityMode)` Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state).
`boolean` `isEqual(Object x, Object y, EntityMode entityMode, SessionFactoryImplementor factory)` Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state).
`boolean` `isModified(Object old, Object current, boolean[] checkable, SessionImplementor session)` Has the value been modified compared to the current database state? The difference between this and the `Type.isDirty(java.lang.Object, java.lang.Object, org.hibernate.engine.SessionImplementor)` methods is that here we need to account for "partially" built values.
`boolean` `isSame(Object x, Object y, EntityMode entityMode)` Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state) taking a shortcut for entity references.
`boolean` `isXMLElement()`
`Object` `replace(Object original, Object target, SessionImplementor session, Object owner, Map copyCache, ForeignKeyDirection foreignKeyDirection)` During merge, replace the existing (target) value in the entity we are merging to with a new (original) value from the detached entity we are merging.
`protected static void` `replaceNode(org.dom4j.Node container, org.dom4j.Element value)`
`Object` `resolve(Object value, SessionImplementor session, Object owner)` Map identifiers to entities or collections.
`Object` `semiResolve(Object value, SessionImplementor session, Object owner)` Given a hydrated, but unresolved value, return a value that may be used to reconstruct property-ref associations.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Methods inherited from interface org.hibernate.type.Type
`deepCopy, fromXMLNode, getColumnSpan, getName, getReturnedClass, isDirty, isMutable, nullSafeGet, nullSafeGet, nullSafeSet, nullSafeSet, replace, setToXMLNode, sqlTypes, toColumnNullness, toLoggableString`

Constructor Detail

### AbstractType

    public AbstractType()

Method Detail

### isAssociationType

    public boolean isAssociationType()

  Description copied from interface: `Type`
  Return true if the implementation is castable to `AssociationType`. This does not necessarily imply that the type actually represents an association. Essentially a polymorphic version of `(type instanceof AssociationType.class)`

  Specified by:
    `isAssociationType` in interface `Type`
  Returns:
    True if this type is also an `AssociationType` implementor; false otherwise.

### isCollectionType

    public boolean isCollectionType()

  Description copied from interface: `Type`
  Return true if the implementation is castable to `CollectionType`. Essentially a polymorphic version of `(type instanceof CollectionType.class)`

  A `CollectionType` is additionally an `AssociationType`; so if this method returns true, `Type.isAssociationType()` should also return true.

  Specified by:
    `isCollectionType` in interface `Type`
  Returns:
    True if this type is also an `CollectionType` implementor; false otherwise.

### isComponentType

    public boolean isComponentType()

  Description copied from interface: `Type`
  Return true if the implementation is castable to `CompositeType`. Essentially a polymorphic version of `(type instanceof CompositeType.class)`. A component type may own collections or associations and hence must provide certain extra functionality.

  Specified by:
    `isComponentType` in interface `Type`
  Returns:
    True if this type is also an `CompositeType` implementor; false otherwise.

### isEntityType

    public boolean isEntityType()

  Description copied from interface: `Type`
  Return true if the implementation is castable to `EntityType`. Essentially a polymorphic version of `(type instanceof EntityType.class)`.

  An `EntityType` is additionally an `AssociationType`; so if this method returns true, `Type.isAssociationType()` should also return true.

  Specified by:
    `isEntityType` in interface `Type`
  Returns:
    True if this type is also an `EntityType` implementor; false otherwise.

### isXMLElement

    public boolean isXMLElement()

  Specified by:
    `isXMLElement` in interface `Type`

### compare

    public int compare(Object x,
                       Object y,
                       EntityMode entityMode)

  Description copied from interface: `Type`
  Perform a `Comparator` style comparison between values

  Specified by:
    `compare` in interface `Type`
  Parameters:
    `x` - The first value
    `y` - The second value
    `entityMode` - The entity mode of the values.
  Returns:
    The comparison result. See `Comparator.compare(T, T)` for a discussion.

### disassemble

    public Serializable disassemble(Object value,
                                    SessionImplementor session,
                                    Object owner)
                             throws HibernateException

  Description copied from interface: `Type`
  Return a cacheable "disassembled" representation of the object.

  Specified by:
    `disassemble` in interface `Type`
  Parameters:
    `value` - the value to cache
    `session` - the session
    `owner` - optional parent entity object (needed for collections)
  Returns:
    the disassembled, deep cloned state
  Throws:
    `HibernateException`

### assemble

    public Object assemble(Serializable cached,
                           SessionImplementor session,
                           Object owner)
                    throws HibernateException

  Description copied from interface: `Type`
  Reconstruct the object from its cached "disassembled" state.

  Specified by:
    `assemble` in interface `Type`
  Parameters:
    `cached` - the disassembled state from the cache
    `session` - the session
    `owner` - the parent entity object
  Returns:
    the the object
  Throws:
    `HibernateException`

### isDirty

    public boolean isDirty(Object old,
                           Object current,
                           SessionImplementor session)
                    throws HibernateException

  Description copied from interface: `Type`
  Should the parent be considered dirty, given both the old and current value?

  Specified by:
    `isDirty` in interface `Type`
  Parameters:
    `old` - the old value
    `current` - the current value
    `session` - The session from which the request originated.
  Returns:
    true if the field is dirty
  Throws:
    `HibernateException` - A problem occurred performing the checking

### hydrate

    public Object hydrate(ResultSet rs,
                          String[] names,
                          SessionImplementor session,
                          Object owner)
                   throws HibernateException,
                          SQLException

  Description copied from interface: `Type`
  Retrieve an instance of the mapped class, or the identifier of an entity or collection, from a JDBC resultset. This is useful for 2-phase property initialization - the second phase is a call to `resolveIdentifier()`.

  Specified by:
    `hydrate` in interface `Type`
    `names` - the column names
    `session` - the session
    `owner` - the parent entity
  Returns:
    Object an identifier or actual value
  Throws:
    `HibernateException`
    `SQLException`
  See Also:
    `Type.resolve(Object, SessionImplementor, Object)`

### resolve

    public Object resolve(Object value,
                          SessionImplementor session,
                          Object owner)
                   throws HibernateException

  Description copied from interface: `Type`
  Map identifiers to entities or collections. This is the second phase of 2-phase property initialization.

  Specified by:
    `resolve` in interface `Type`
  Parameters:
    `value` - an identifier or value returned by `hydrate()`
    `session` - the session
    `owner` - the parent entity
  Returns:
    the given value, or the value associated with the identifier
  Throws:
    `HibernateException`
  See Also:
    `Type.hydrate(ResultSet, String[], SessionImplementor, Object)`

### semiResolve

    public Object semiResolve(Object value,
                              SessionImplementor session,
                              Object owner)
                       throws HibernateException

  Description copied from interface: `Type`
  Given a hydrated, but unresolved value, return a value that may be used to reconstruct property-ref associations.

  Specified by:
    `semiResolve` in interface `Type`
  Throws:
    `HibernateException`

### isAnyType

    public boolean isAnyType()

  Description copied from interface: `Type`
  Return true if the implementation is castable to `AnyType`. Essentially a polymorphic version of `(type instanceof AnyType.class)`.

  An `AnyType` is additionally an `AssociationType`; so if this method returns true, `Type.isAssociationType()` should also return true.

  Specified by:
    `isAnyType` in interface `Type`
  Returns:
    True if this type is also an `AnyType` implementor; false otherwise.

### isModified

    public boolean isModified(Object old,
                              Object current,
                              boolean[] checkable,
                              SessionImplementor session)
                       throws HibernateException

  Description copied from interface: `Type`
  Has the value been modified compared to the current database state? The difference between this and the `Type.isDirty(java.lang.Object, java.lang.Object, org.hibernate.engine.SessionImplementor)` methods is that here we need to account for "partially" built values. This is really only an issue with association types. For most type implementations it is enough to simply delegate to `Type.isDirty(java.lang.Object, java.lang.Object, org.hibernate.engine.SessionImplementor)` here/

  Specified by:
    `isModified` in interface `Type`
  Parameters:
    `old` - the database state, in a "hydrated" form, with identifiers unresolved
    `current` - the current state of the object
    `checkable` - which columns are actually updatable
    `session` - The session from which the request originated.
  Returns:
    true if the field has been modified
  Throws:
    `HibernateException` - A problem occurred performing the checking

### isSame

    public boolean isSame(Object x,
                          Object y,
                          EntityMode entityMode)
                   throws HibernateException

  Description copied from interface: `Type`
  Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state) taking a shortcut for entity references.

  For most types this should equate to `#equals` check on the values. For associations the implication is a bit different. For most types it is conceivable to simply delegate to `Type.isEqual(java.lang.Object, java.lang.Object, org.hibernate.EntityMode)`

  Specified by:
    `isSame` in interface `Type`
  Parameters:
    `x` - The first value
    `y` - The second value
    `entityMode` - The entity mode of the values.
  Returns:
    True if there are considered the same (see discussion above).
  Throws:
    `HibernateException` - A problem occurred performing the comparison

### isEqual

    public boolean isEqual(Object x,
                           Object y,
                           EntityMode entityMode)

  Description copied from interface: `Type`
  Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state).

  This should always equate to some form of comparison of the value's internal state. As an example, for something like a date the comparison should be based on its internal "time" state based on the specific portion it is meant to represent (timestamp, date, time).

  Specified by:
    `isEqual` in interface `Type`
  Parameters:
    `x` - The first value
    `y` - The second value
    `entityMode` - The entity mode of the values.
  Returns:
    True if there are considered equal (see discussion above).

### getHashCode

    public int getHashCode(Object x,
                           EntityMode entityMode)

  Description copied from interface: `Type`
  Get a hash code, consistent with persistence "equality". Again for most types the normal usage is to delegate to the value's `#hashCode`.

  Specified by:
    `getHashCode` in interface `Type`
  Parameters:
    `x` - The value for which to retrieve a hash code
    `entityMode` - The entity mode of the value.
  Returns:
    The hash code

### isEqual

    public boolean isEqual(Object x,
                           Object y,
                           EntityMode entityMode,
                           SessionFactoryImplementor factory)

  Description copied from interface: `Type`
  Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state).

  This should always equate to some form of comparison of the value's internal state. As an example, for something like a date the comparison should be based on its internal "time" state based on the specific portion it is meant to represent (timestamp, date, time).

  Specified by:
    `isEqual` in interface `Type`
  Parameters:
    `x` - The first value
    `y` - The second value
    `entityMode` - The entity mode of the values.
    `factory` - The session factory
  Returns:
    True if there are considered equal (see discussion above).

### getHashCode

    public int getHashCode(Object x,
                           EntityMode entityMode,
                           SessionFactoryImplementor factory)

  Description copied from interface: `Type`
  Get a hash code, consistent with persistence "equality". Again for most types the normal usage is to delegate to the value's `#hashCode`.

  Specified by:
    `getHashCode` in interface `Type`
  Parameters:
    `x` - The value for which to retrieve a hash code
    `entityMode` - The entity mode of the value.
    `factory` - The session factory
  Returns:
    The hash code

### replaceNode

    protected static void replaceNode(org.dom4j.Node container,
                                      org.dom4j.Element value)

### getSemiResolvedType

    public Type getSemiResolvedType(SessionFactoryImplementor factory)

  Description copied from interface: `Type`
  Get the type of a semi-resolved value.

  Specified by:
    `getSemiResolvedType` in interface `Type`

### replace

    public Object replace(Object original,
                          Object target,
                          SessionImplementor session,
                          Object owner,
                          Map copyCache,
                          ForeignKeyDirection foreignKeyDirection)
                   throws HibernateException

  Description copied from interface: `Type`
  During merge, replace the existing (target) value in the entity we are merging to with a new (original) value from the detached entity we are merging. For immutable objects, or null values, it is safe to simply return the first parameter. For mutable objects, it is safe to return a copy of the first parameter. For objects with component values, it might make sense to recursively replace component values.

  Specified by:
    `replace` in interface `Type`
  Parameters:
    `original` - the value from the detached entity being merged
    `target` - the value in the managed entity
  Returns:
    the value to be merged
  Throws:
    `HibernateException`

### beforeAssemble

    public void beforeAssemble(Serializable cached,
                               SessionImplementor session)

  Description copied from interface: `Type`
  Called before assembling a query result set from the query cache, to allow batch fetching of entities missing from the second-level cache.

  Specified by:
    `beforeAssemble` in interface `Type`

Copyright © 2001-2010 Red Hat, Inc. All Rights Reserved.