public abstract class

CollectionType

extends AbstractType
implements AssociationType
java.lang.Object
   ↳ org.hibernate.type.AbstractType
     ↳ org.hibernate.type.CollectionType
Known Direct Subclasses
Known Indirect Subclasses

Class Overview

A type that handles Hibernate PersistentCollections (including arrays).

Summary

Fields
public static final Object UNFETCHED_COLLECTION
Public Constructors
CollectionType(TypeFactory.TypeScope typeScope, String role, String foreignKeyPropertyName, boolean isEmbeddedInXML)
Public Methods
Object assemble(Serializable cached, SessionImplementor session, Object owner)
Reconstruct the object from its cached "disassembled" state.
int compare(Object x, Object y, EntityMode entityMode)
Perform a Comparator style comparison between values
boolean contains(Object collection, Object childObject, SessionImplementor session)
Object deepCopy(Object value, EntityMode entityMode, SessionFactoryImplementor factory)
Return a deep copy of the persistent state, stopping at entities and at collections.
Serializable disassemble(Object value, SessionImplementor session, Object owner)
Return a cacheable "disassembled" representation of the object.
Object fromXMLNode(Node xml, Mapping factory)
Parse the XML representation of an instance.
String getAssociatedEntityName(SessionFactoryImplementor factory)
Get the entity name of the associated entity
Joinable getAssociatedJoinable(SessionFactoryImplementor factory)
Get the "persister" for this association - a class or collection persister
Object getCollection(Serializable key, SessionImplementor session, Object owner)
instantiate a collection wrapper (called when loading an object)
int getColumnSpan(Mapping session)
How many columns are used to persist this type.
final Type getElementType(SessionFactoryImplementor factory)
Get the Hibernate type of the collection elements
Iterator getElementsIterator(Object collection, SessionImplementor session)
Get an iterator over the element set of the collection, which may not yet be wrapped
ForeignKeyDirection getForeignKeyDirection()
Get the foreign key directionality of this association
int getHashCode(Object x, EntityMode entityMode)
Get a hash code, consistent with persistence "equality".
Serializable getIdOfOwnerOrNull(Serializable key, SessionImplementor session)
Get the id value from the owning entity key, usually the same as the key, but might be some other property, in the case of property-ref
Serializable getKeyOfOwner(Object owner, SessionImplementor session)
Get the key value from the owning entity instance, usually the identifier, but might be some other unique key, in the case of property-ref
String getLHSPropertyName()
Get the name of a property in the owning entity that provides the join key (null if the identifier)
String getName()
Returns the abbreviated name of the type.
String getOnCondition(String alias, SessionFactoryImplementor factory, Map enabledFilters)
Get the "filtering" SQL fragment that is applied in the SQL on clause, in addition to the usual join condition
String getRHSUniqueKeyPropertyName()
The name of a unique property of the associated entity that provides the join key (null if the identifier of an entity, or key of a collection)
String getRole()
boolean hasHolder(EntityMode entityMode)
Object hydrate(ResultSet rs, String[] name, SessionImplementor session, Object owner)
Retrieve an instance of the mapped class, or the identifier of an entity or collection, from a JDBC resultset.
Object indexOf(Object collection, Object element)
abstract PersistentCollection instantiate(SessionImplementor session, CollectionPersister persister, Serializable key)
Instantiate an uninitialized collection wrapper or holder.
abstract Object instantiate(int anticipatedSize)
Instantiate an empty instance of the "underlying" collection (not a wrapper), but with the given anticipated size (i.e.
boolean isAlwaysDirtyChecked()
We always need to dirty check the collection because we sometimes need to incremement version number of owner and also because of how assemble/disassemble is implemented for uks
boolean isArrayType()
boolean isAssociationType()
Note: return true because this type is castable to AssociationType.
boolean isCollectionType()
Return true if the implementation is castable to CollectionType.
boolean isDirty(Object old, Object current, boolean[] checkable, SessionImplementor session)
Should the parent be considered dirty, given both the old and current value?
boolean isDirty(Object old, Object current, SessionImplementor session)
Should the parent be considered dirty, given both the old and current value?
boolean isEmbeddedInXML()
final 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 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 isDirty(Object, Object, boolean[], SessionImplementor) methods is that here we need to account for "partially" built values.
boolean isMutable()
Are objects of this type mutable.
boolean isXMLElement()
Object nullSafeGet(ResultSet rs, String[] name, SessionImplementor session, Object owner)
Retrieve an instance of the mapped class from a JDBC resultset.
Object nullSafeGet(ResultSet rs, String name, SessionImplementor session, Object owner)
Retrieve an instance of the mapped class from a JDBC resultset.
void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session)
Write an instance of the mapped class to a prepared statement.
final void nullSafeSet(PreparedStatement st, Object value, int index, boolean[] settable, SessionImplementor session)
Write an instance of the mapped class to a prepared statement, ignoring some columns.
Object replace(Object original, Object target, SessionImplementor session, Object owner, Map copyCache)
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.
Object replaceElements(Object original, Object target, Object owner, Map copyCache, SessionImplementor session)
Replace the elements of a collection with the elements of another collection.
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.
void setToXMLNode(Node node, Object value, SessionFactoryImplementor factory)
A representation of the value to be embedded in an XML element.
int[] sqlTypes(Mapping session)
Return the JDBC types codes (per java.sql.Types) for the columns mapped by this type.
boolean[] toColumnNullness(Object value, Mapping mapping)
Given an instance of the type, return an array of boolean, indicating which mapped columns would be null.
String toLoggableString(Object value, SessionFactoryImplementor factory)
A representation of the value to be embedded in a log file.
String toString()
boolean useLHSPrimaryKey()
Is the primary key of the owning entity table to be used in the join?
abstract PersistentCollection wrap(SessionImplementor session, Object collection)
Wrap the naked collection instance in a wrapper, or instantiate a holder.
Protected Methods
Iterator getElementsIterator(Object collection)
Get an iterator over the element set of the collection in POJO mode
boolean initializeImmediately(EntityMode entityMode)
Object instantiateResult(Object original)
Instantiate a new "underlying" collection exhibiting the same capacity charactersitcs and the passed "original".
String renderLoggableString(Object value, SessionFactoryImplementor factory)
[Expand]
Inherited Methods
From class org.hibernate.type.AbstractType
From class java.lang.Object
From interface org.hibernate.type.AssociationType
From interface org.hibernate.type.Type

Fields

public static final Object UNFETCHED_COLLECTION

Public Constructors

public CollectionType (TypeFactory.TypeScope typeScope, String role, String foreignKeyPropertyName, boolean isEmbeddedInXML)

Public Methods

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

Reconstruct the object from its cached "disassembled" state.

Parameters
cached the disassembled state from the cache
session the session
owner the parent entity object
Returns
  • the the object

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

Perform a Comparator style comparison between values

Parameters
x The first value
y The second value
entityMode The entity mode of the values.
Returns

public boolean contains (Object collection, Object childObject, SessionImplementor session)

public Object deepCopy (Object value, EntityMode entityMode, SessionFactoryImplementor factory)

Return a deep copy of the persistent state, stopping at entities and at collections.

Parameters
value generally a collection element or entity field
Returns
  • Object a copy

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

Return a cacheable "disassembled" representation of the object.

Parameters
value the value to cache
session the session
owner optional parent entity object (needed for collections)
Returns
  • the disassembled, deep cloned state

public Object fromXMLNode (Node xml, Mapping factory)

Parse the XML representation of an instance.

Returns
  • an instance of the type

public String getAssociatedEntityName (SessionFactoryImplementor factory)

Get the entity name of the associated entity

public Joinable getAssociatedJoinable (SessionFactoryImplementor factory)

Get the "persister" for this association - a class or collection persister

public Object getCollection (Serializable key, SessionImplementor session, Object owner)

instantiate a collection wrapper (called when loading an object)

Parameters
key The collection owner key
session The session from which the request is originating.
owner The collection owner
Returns
  • The collection

public int getColumnSpan (Mapping session)

How many columns are used to persist this type. Always the same as sqlTypes(mapping).length

Parameters
session The mapping object :/
Returns
  • The number of columns

public final Type getElementType (SessionFactoryImplementor factory)

Get the Hibernate type of the collection elements

Parameters
factory The session factory.
Returns
  • The type of the collection elements
Throws
MappingException Indicates the underlying persister could not be located.

public Iterator getElementsIterator (Object collection, SessionImplementor session)

Get an iterator over the element set of the collection, which may not yet be wrapped

Parameters
collection The collection to be iterated
session The session from which the request is originating.
Returns
  • The iterator.

public ForeignKeyDirection getForeignKeyDirection ()

Get the foreign key directionality of this association

public int getHashCode (Object x, EntityMode entityMode)

Get a hash code, consistent with persistence "equality". Again for most types the normal usage is to delegate to the value's #hashCode.

Parameters
x The value for which to retrieve a hash code
entityMode The entity mode of the value.
Returns
  • The hash code

public Serializable getIdOfOwnerOrNull (Serializable key, SessionImplementor session)

Get the id value from the owning entity key, usually the same as the key, but might be some other property, in the case of property-ref

Parameters
key The collection owner key
session The session from which the request is originating.
Returns
  • The collection owner's id, if it can be obtained from the key; otherwise, null is returned

public Serializable getKeyOfOwner (Object owner, SessionImplementor session)

Get the key value from the owning entity instance, usually the identifier, but might be some other unique key, in the case of property-ref

Parameters
owner The collection owner
session The session from which the request is originating.
Returns
  • The collection owner's key

public String getLHSPropertyName ()

Get the name of a property in the owning entity that provides the join key (null if the identifier)

public String getName ()

Returns the abbreviated name of the type.

Returns
  • String the Hibernate type name

public String getOnCondition (String alias, SessionFactoryImplementor factory, Map enabledFilters)

Get the "filtering" SQL fragment that is applied in the SQL on clause, in addition to the usual join condition

public String getRHSUniqueKeyPropertyName ()

The name of a unique property of the associated entity that provides the join key (null if the identifier of an entity, or key of a collection)

public String getRole ()

public boolean hasHolder (EntityMode entityMode)

public Object hydrate (ResultSet rs, String[] name, SessionImplementor session, Object owner)

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().

Parameters
name the column names
session the session
owner the parent entity
Returns
  • Object an identifier or actual value

public Object indexOf (Object collection, Object element)

public abstract PersistentCollection instantiate (SessionImplementor session, CollectionPersister persister, Serializable key)

Instantiate an uninitialized collection wrapper or holder. Callers MUST add the holder to the persistence context!

Parameters
session The session from which the request is originating.
persister The underlying collection persister (metadata)
key The owner key.
Returns
  • The instantiated collection.

public abstract Object instantiate (int anticipatedSize)

Instantiate an empty instance of the "underlying" collection (not a wrapper), but with the given anticipated size (i.e. accounting for initial capacity and perhaps load factor).

Parameters
anticipatedSize The anticipated size of the instaniated collection after we are done populating it.
Returns
  • A newly instantiated collection to be wrapped.

public boolean isAlwaysDirtyChecked ()

We always need to dirty check the collection because we sometimes need to incremement version number of owner and also because of how assemble/disassemble is implemented for uks

public boolean isArrayType ()

public boolean isAssociationType ()

Note: return true because this type is castable to AssociationType. Not because all collections are associations.

Returns
  • True if this type is also an AssociationType implementor; false otherwise.

public boolean isCollectionType ()

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, isAssociationType() should also return true.

Returns
  • True if this type is also an CollectionType implementor; false otherwise.

public boolean isDirty (Object old, Object current, boolean[] checkable, SessionImplementor session)

Should the parent be considered dirty, given both the old and current value?

Parameters
old the old value
current the current value
checkable An array of booleans indicating which columns making up the value are actually checkable
session The session from which the request originated.
Returns
  • true if the field is dirty

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

Should the parent be considered dirty, given both the old and current value?

Parameters
old the old value
current the current value
session The session from which the request originated.
Returns
  • true if the field is dirty

public boolean isEmbeddedInXML ()

public final 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).

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

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

public 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 isDirty(Object, Object, boolean[], 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 isDirty(Object, Object, boolean[], SessionImplementor) here/

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

public boolean isMutable ()

Are objects of this type mutable. (With respect to the referencing object ... entities and collections are considered immutable because they manage their own internal state.)

Returns
  • boolean

public boolean isXMLElement ()

public Object nullSafeGet (ResultSet rs, String[] name, SessionImplementor session, Object owner)

Retrieve an instance of the mapped class from a JDBC resultset. Implementors should handle possibility of null values.

Parameters
name the column names
owner the parent entity
Returns
  • Object

public Object nullSafeGet (ResultSet rs, String name, SessionImplementor session, Object owner)

Retrieve an instance of the mapped class from a JDBC resultset. Implementations should handle possibility of null values. This method might be called if the type is known to be a single-column type.

Parameters
name the column name
owner the parent entity
Returns
  • Object
Throws
SQLException

public void nullSafeSet (PreparedStatement st, Object value, int index, SessionImplementor session)

Write an instance of the mapped class to a prepared statement. Implementors should handle possibility of null values. A multi-column type should be written to parameters starting from index.

Parameters
value the object to write
index statement parameter index

public final void nullSafeSet (PreparedStatement st, Object value, int index, boolean[] settable, SessionImplementor session)

Write an instance of the mapped class to a prepared statement, ignoring some columns. Implementors should handle possibility of null values. A multi-column type should be written to parameters starting from index.

Parameters
value the object to write
index statement parameter index
settable an array indicating which columns to ignore

public Object replace (Object original, Object target, SessionImplementor session, Object owner, Map copyCache)

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.

Parameters
original the value from the detached entity being merged
target the value in the managed entity
Returns
  • the value to be merged

public Object replaceElements (Object original, Object target, Object owner, Map copyCache, SessionImplementor session)

Replace the elements of a collection with the elements of another collection.

Parameters
original The 'source' of the replacement elements (where we copy from)
target The target of the replacement elements (where we copy to)
owner The owner of the collection being merged
copyCache The map of elements already replaced.
session The session from which the merge event originated.
Returns
  • The merged collection.

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

Map identifiers to entities or collections. This is the second phase of 2-phase property initialization.

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

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

public void setToXMLNode (Node node, Object value, SessionFactoryImplementor factory)

A representation of the value to be embedded in an XML element.

Returns
  • String

public int[] sqlTypes (Mapping session)

Return the JDBC types codes (per java.sql.Types) for the columns mapped by this type.

Parameters
session The mapping object :/
Returns
  • The JDBC type codes.

public boolean[] toColumnNullness (Object value, Mapping mapping)

Given an instance of the type, return an array of boolean, indicating which mapped columns would be null.

Parameters
value an instance of the type

public String toLoggableString (Object value, SessionFactoryImplementor factory)

A representation of the value to be embedded in a log file.

Returns
  • String

public String toString ()

public boolean useLHSPrimaryKey ()

Is the primary key of the owning entity table to be used in the join?

public abstract PersistentCollection wrap (SessionImplementor session, Object collection)

Wrap the naked collection instance in a wrapper, or instantiate a holder. Callers MUST add the holder to the persistence context!

Parameters
session The session from which the request is originating.
collection The bare collection to be wrapped.
Returns
  • The wrapped collection.

Protected Methods

protected Iterator getElementsIterator (Object collection)

Get an iterator over the element set of the collection in POJO mode

Parameters
collection The collection to be iterated
Returns
  • The iterator.

protected boolean initializeImmediately (EntityMode entityMode)

protected Object instantiateResult (Object original)

Instantiate a new "underlying" collection exhibiting the same capacity charactersitcs and the passed "original".

Parameters
original The original collection.
Returns
  • The newly instantiated collection.

protected String renderLoggableString (Object value, SessionFactoryImplementor factory)