org.hibernate.persister.collection
Interface CollectionPersister

All Known Subinterfaces:
QueryableCollection, SQLLoadableCollection
All Known Implementing Classes:
AbstractCollectionPersister

public interface CollectionPersister

A strategy for persisting a collection role. Defines a contract between the persistence strategy and the actual persistent collection framework and session. Does not define operations that are required for querying collections, or loading by outer join.

Implements persistence of a collection instance while the instance is referenced in a particular role.

This class is highly coupled to the PersistentCollection hierarchy, since double dispatch is used to load and update collection elements.

May be considered an immutable view of the mapping object

Author:
Gavin King
See Also:
QueryableCollection, PersistentCollection

Method Summary
 void deleteRows(PersistentCollection collection, Serializable key, SessionImplementor session)
          Delete the persistent state of any elements that were removed from the collection
 boolean elementExists(Serializable key, Object element, SessionImplementor session)
           
 CacheConcurrencyStrategy getCache()
          Get the cache
 CacheEntryStructure getCacheEntryStructure()
          Get the cache structure
 CollectionMetadata getCollectionMetadata()
           
 Serializable[] getCollectionSpaces()
          Get the "space" that holds the persistent state
 CollectionType getCollectionType()
          Get the associated Type
 Object getElementByIndex(Serializable key, Object index, SessionImplementor session, Object owner)
           
 Class getElementClass()
          Return the element class of an array, or null otherwise
 String[] getElementColumnAliases(String suffix)
          Generates the collection's element column aliases, based on the given suffix.
 String getElementNodeName()
           
 Type getElementType()
          Get the "element" type
 SessionFactoryImplementor getFactory()
           
 String getIdentifierColumnAlias(String suffix)
          Generates the collection's identifier column aliases, based on the given suffix.
 IdentifierGenerator getIdentifierGenerator()
          Get the surrogate key generation strategy (optional operation)
 Type getIdentifierType()
          Get the type of the surrogate key
 String[] getIndexColumnAliases(String suffix)
          Generates the collection's index column aliases, based on the given suffix.
 String getIndexNodeName()
           
 Type getIndexType()
          Get the "index" type for a list or map (optional operation)
 String[] getKeyColumnAliases(String suffix)
          Generates the collection's key column aliases, based on the given suffix.
 Type getKeyType()
          Get the "key" type (the type of the foreign key)
 String getManyToManyFilterFragment(String alias, Map enabledFilters)
           
 String getNodeName()
           
 EntityPersister getOwnerEntityPersister()
          Get the persister of the entity that "owns" this collection
 String getRole()
          Get the name of this collection role (the fully qualified class name, extended by a "property path")
 int getSize(Serializable key, SessionImplementor session)
           
 boolean hasCache()
          Is this collection role cacheable
 boolean hasIndex()
          Is this an "indexed" collection? (list or map)
 boolean hasManyToManyOrdering()
           
 boolean hasOrdering()
          Is this an ordered collection? (An ordered collection is ordered by the initialization operation, not by sorting that happens in memory, as in the case of a sorted collection.)
 boolean hasOrphanDelete()
          Does this collection implement "orphan delete"?
 boolean indexExists(Serializable key, Object index, SessionImplementor session)
           
 void initialize(Serializable key, SessionImplementor session)
          Initialize the given collection with the given key
 void insertRows(PersistentCollection collection, Serializable key, SessionImplementor session)
          Insert the persistent state of any new collection elements
 boolean isAffectedByEnabledFilters(SessionImplementor session)
           
 boolean isArray()
          Is this an array?
 boolean isCascadeDeleteEnabled()
          Is cascade delete handled by the database-level foreign key constraint definition?
 boolean isExtraLazy()
           
 boolean isInverse()
          Is this collection "inverse", so state changes are not propogated to the database.
 boolean isLazy()
          Is this collection lazyily initialized?
 boolean isManyToMany()
          Is this a many-to-many association? Note that this is mainly a convenience feature as the single persister does not conatin all the information needed to handle a many-to-many itself, as internally it is looked at as two many-to-ones.
 boolean isMutable()
          Can the elements of this collection change?
 boolean isOneToMany()
          Is this a one-to-many association?
 boolean isPrimitiveArray()
          Is this an array or primitive values?
 boolean isVersioned()
          Does this collection cause version increment of the owning entity?
 void postInstantiate()
           
 Object readElement(ResultSet rs, Object owner, String[] columnAliases, SessionImplementor session)
          Read the element from a row of the JDBC ResultSet
 Object readIdentifier(ResultSet rs, String columnAlias, SessionImplementor session)
          Read the identifier from a row of the JDBC ResultSet
 Object readIndex(ResultSet rs, String[] columnAliases, SessionImplementor session)
          Read the index from a row of the JDBC ResultSet
 Object readKey(ResultSet rs, String[] keyAliases, SessionImplementor session)
          Read the key from a row of the JDBC ResultSet
 void recreate(PersistentCollection collection, Serializable key, SessionImplementor session)
          (Re)create the collection's persistent state
 void remove(Serializable id, SessionImplementor session)
          Completely remove the persistent state of the collection
 void updateRows(PersistentCollection collection, Serializable key, SessionImplementor session)
          Update the persistent state of any elements that were modified
 

Method Detail

initialize

public void initialize(Serializable key,
                       SessionImplementor session)
                throws HibernateException
Initialize the given collection with the given key

Throws:
HibernateException

getCache

public CacheConcurrencyStrategy getCache()
Get the cache


hasCache

public boolean hasCache()
Is this collection role cacheable


getCacheEntryStructure

public CacheEntryStructure getCacheEntryStructure()
Get the cache structure


getCollectionType

public CollectionType getCollectionType()
Get the associated Type


getKeyType

public Type getKeyType()
Get the "key" type (the type of the foreign key)


getIndexType

public Type getIndexType()
Get the "index" type for a list or map (optional operation)


getElementType

public Type getElementType()
Get the "element" type


getElementClass

public Class getElementClass()
Return the element class of an array, or null otherwise


readKey

public Object readKey(ResultSet rs,
                      String[] keyAliases,
                      SessionImplementor session)
               throws HibernateException,
                      SQLException
Read the key from a row of the JDBC ResultSet

Throws:
HibernateException
SQLException

readElement

public Object readElement(ResultSet rs,
                          Object owner,
                          String[] columnAliases,
                          SessionImplementor session)
                   throws HibernateException,
                          SQLException
Read the element from a row of the JDBC ResultSet

Throws:
HibernateException
SQLException

readIndex

public Object readIndex(ResultSet rs,
                        String[] columnAliases,
                        SessionImplementor session)
                 throws HibernateException,
                        SQLException
Read the index from a row of the JDBC ResultSet

Throws:
HibernateException
SQLException

readIdentifier

public Object readIdentifier(ResultSet rs,
                             String columnAlias,
                             SessionImplementor session)
                      throws HibernateException,
                             SQLException
Read the identifier from a row of the JDBC ResultSet

Throws:
HibernateException
SQLException

isPrimitiveArray

public boolean isPrimitiveArray()
Is this an array or primitive values?


isArray

public boolean isArray()
Is this an array?


isOneToMany

public boolean isOneToMany()
Is this a one-to-many association?


isManyToMany

public boolean isManyToMany()
Is this a many-to-many association? Note that this is mainly a convenience feature as the single persister does not conatin all the information needed to handle a many-to-many itself, as internally it is looked at as two many-to-ones.


getManyToManyFilterFragment

public String getManyToManyFilterFragment(String alias,
                                          Map enabledFilters)

hasIndex

public boolean hasIndex()
Is this an "indexed" collection? (list or map)


isLazy

public boolean isLazy()
Is this collection lazyily initialized?


isInverse

public boolean isInverse()
Is this collection "inverse", so state changes are not propogated to the database.


remove

public void remove(Serializable id,
                   SessionImplementor session)
            throws HibernateException
Completely remove the persistent state of the collection

Throws:
HibernateException

recreate

public void recreate(PersistentCollection collection,
                     Serializable key,
                     SessionImplementor session)
              throws HibernateException
(Re)create the collection's persistent state

Throws:
HibernateException

deleteRows

public void deleteRows(PersistentCollection collection,
                       Serializable key,
                       SessionImplementor session)
                throws HibernateException
Delete the persistent state of any elements that were removed from the collection

Throws:
HibernateException

updateRows

public void updateRows(PersistentCollection collection,
                       Serializable key,
                       SessionImplementor session)
                throws HibernateException
Update the persistent state of any elements that were modified

Throws:
HibernateException

insertRows

public void insertRows(PersistentCollection collection,
                       Serializable key,
                       SessionImplementor session)
                throws HibernateException
Insert the persistent state of any new collection elements

Throws:
HibernateException

getRole

public String getRole()
Get the name of this collection role (the fully qualified class name, extended by a "property path")


getOwnerEntityPersister

public EntityPersister getOwnerEntityPersister()
Get the persister of the entity that "owns" this collection


getIdentifierGenerator

public IdentifierGenerator getIdentifierGenerator()
Get the surrogate key generation strategy (optional operation)


getIdentifierType

public Type getIdentifierType()
Get the type of the surrogate key


hasOrphanDelete

public boolean hasOrphanDelete()
Does this collection implement "orphan delete"?


hasOrdering

public boolean hasOrdering()
Is this an ordered collection? (An ordered collection is ordered by the initialization operation, not by sorting that happens in memory, as in the case of a sorted collection.)


hasManyToManyOrdering

public boolean hasManyToManyOrdering()

getCollectionSpaces

public Serializable[] getCollectionSpaces()
Get the "space" that holds the persistent state


getCollectionMetadata

public CollectionMetadata getCollectionMetadata()

isCascadeDeleteEnabled

public boolean isCascadeDeleteEnabled()
Is cascade delete handled by the database-level foreign key constraint definition?


isVersioned

public boolean isVersioned()
Does this collection cause version increment of the owning entity?


isMutable

public boolean isMutable()
Can the elements of this collection change?


getNodeName

public String getNodeName()

getElementNodeName

public String getElementNodeName()

getIndexNodeName

public String getIndexNodeName()

postInstantiate

public void postInstantiate()
                     throws MappingException
Throws:
MappingException

getFactory

public SessionFactoryImplementor getFactory()

isAffectedByEnabledFilters

public boolean isAffectedByEnabledFilters(SessionImplementor session)

getKeyColumnAliases

public String[] getKeyColumnAliases(String suffix)
Generates the collection's key column aliases, based on the given suffix.

Parameters:
suffix - The suffix to use in the key column alias generation.
Returns:
The key column aliases.

getIndexColumnAliases

public String[] getIndexColumnAliases(String suffix)
Generates the collection's index column aliases, based on the given suffix.

Parameters:
suffix - The suffix to use in the index column alias generation.
Returns:
The key column aliases, or null if not indexed.

getElementColumnAliases

public String[] getElementColumnAliases(String suffix)
Generates the collection's element column aliases, based on the given suffix.

Parameters:
suffix - The suffix to use in the element column alias generation.
Returns:
The key column aliases.

getIdentifierColumnAlias

public String getIdentifierColumnAlias(String suffix)
Generates the collection's identifier column aliases, based on the given suffix.

Parameters:
suffix - The suffix to use in the key column alias generation.
Returns:
The key column aliases.

isExtraLazy

public boolean isExtraLazy()

getSize

public int getSize(Serializable key,
                   SessionImplementor session)

indexExists

public boolean indexExists(Serializable key,
                           Object index,
                           SessionImplementor session)

elementExists

public boolean elementExists(Serializable key,
                             Object element,
                             SessionImplementor session)

getElementByIndex

public Object getElementByIndex(Serializable key,
                                Object index,
                                SessionImplementor session,
                                Object owner)