## 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.

See Also:
  Serialized Form

Field Summary
`protected static Size` `LEGACY_DEFAULT_SIZE`
`protected static Size` `LEGACY_DICTATED_SIZE`

Constructor Summary
`AbstractType()`

Method Summary
`Object` `assemble(Serializable cached, SessionImplementor session, Object owner)` Reconstruct the object from its 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)` Perform a `Comparator` style comparison between values
`Serializable` `disassemble(Object value, SessionImplementor session, Object owner)` Return a disassembled representation of the object.
`int` `getHashCode(Object x)` Get a hash code, consistent with persistence "equality".
`int` `getHashCode(Object x, SessionFactoryImplementor factory)` Get a hash code, consistent with persistence "equality".
`Type` `getSemiResolvedType(SessionFactoryImplementor factory)` As part of 2-phase loading, when we perform resolving what is the resolved type for this type? Generally speaking the type and its semi-resolved type will be the same.
`Object` `hydrate(ResultSet rs, String[] names, SessionImplementor session, Object owner)` Extract a value from the JDBC result set.
`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)` Compare two instances of the class mapped by this type for persistence "equality" (equality of persistent state).
`boolean` `isEqual(Object x, Object y, 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.spi.SessionImplementor)` methods is that here we need to account for "partially" built values.
`boolean` `isSame(Object x, Object y)` 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)` The second phase of 2-phase loading.
`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, defaultSizes, dictatedSizes, fromXMLNode, getColumnSpan, getName, getReturnedClass, isDirty, isMutable, nullSafeGet, nullSafeGet, nullSafeSet, nullSafeSet, replace, setToXMLNode, sqlTypes, toColumnNullness, toLoggableString`

Field Detail

### LEGACY_DICTATED_SIZE

    protected static final Size LEGACY_DICTATED_SIZE

### LEGACY_DEFAULT_SIZE

    protected static final Size LEGACY_DEFAULT_SIZE

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)

  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
  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 disassembled representation of the object. This is the value Hibernate will use in second level caching, so care should be taken to break values down to their simplest forms; for entities especially, this means breaking them down into their constituent parts.

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

### assemble

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

  Description copied from interface: `Type`
  Reconstruct the object from its disassembled state. This method is the reciprocal of `Type.disassemble(java.lang.Object, org.hibernate.engine.spi.SessionImplementor, java.lang.Object)`

  Specified by:
    `assemble` in interface `Type`
  Parameters:
    `cached` - the disassembled state from the cache
    `session` - the originating session
    `owner` - the parent entity object
  Returns:
    the (re)assembled object
  Throws:
    `HibernateException` - An error from Hibernate

### 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`
  Extract a value from the JDBC result set. This is useful for 2-phase property initialization - the second phase is a call to `Type.resolve(java.lang.Object, org.hibernate.engine.spi.SessionImplementor, java.lang.Object)` This hydrated value will be either:
  - in the case of an entity or collection type, the key
  - otherwise, the value itself

  Specified by:
    `hydrate` in interface `Type`
  Parameters:
    `rs` - The JDBC result set
    `names` - the column names making up this type value (use to read from result set)
    `session` - The originating session
    `owner` - the parent entity
  Returns:
    An entity or collection key, or an actual value.
  Throws:
    `HibernateException` - An error from Hibernate
    `SQLException` - An error from the JDBC driver
  See Also:
    `Type.resolve(java.lang.Object, org.hibernate.engine.spi.SessionImplementor, java.lang.Object)`

### resolve

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

  Description copied from interface: `Type`
  The second phase of 2-phase loading. Only really pertinent for entities and collections. Here we resolve the identifier to an entity or collection instance

  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` - An error from Hibernate
  See Also:
    `Type.hydrate(java.sql.ResultSet, java.lang.String[], org.hibernate.engine.spi.SessionImplementor, java.lang.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`
  Parameters:
    `value` - The unresolved, hydrated value
    `session` - THe originating session
    `owner` - The value owner
  Returns:
    The semi-resolved value
  Throws:
    `HibernateException` - An error from Hibernate

### 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.spi.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.spi.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)
                   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 an `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)`

  Specified by:
    `isSame` in interface `Type`
  Parameters:
    `x` - The first value
    `y` - The second value
  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)

  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
  Returns:
    True if there are considered equal (see discussion above).

### getHashCode

    public int getHashCode(Object x)

  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
  Returns:
    The hash code

### isEqual

    public boolean isEqual(Object x,
                           Object y,
                           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
    `factory` - The session factory
  Returns:
    True if there are considered equal (see discussion above).

### getHashCode

    public int getHashCode(Object x,
                           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
    `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`
  As part of 2-phase loading, when we perform resolving what is the resolved type for this type? Generally speaking the type and its semi-resolved type will be the same. The main deviation from this is in the case of an entity where the type would be the entity type and semi-resolved type would be its identifier type

  Specified by:
    `getSemiResolvedType` in interface `Type`
  Parameters:
    `factory` - The session factory
  Returns:
    The semi-resolved 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
    `session` - The originating session
    `owner` - The owner of the value
    `copyCache` - The cache of already copied/replaced values
    `foreignKeyDirection` - For associations, which direction does the foreign key point?
  Returns:
    the value to be merged
  Throws:
    `HibernateException` - An error from Hibernate

### 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`
  Parameters:
    `cached` - The key
    `session` - The originating session

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