Save This Page
Home » Hibernate-3.3.2.GA » org.hibernate » collection » [javadoc | source]
org.hibernate.collection
public interface: PersistentCollection [javadoc | source]

All Known Implementing Classes:
    PersistentIdentifierBag, PersistentSet, PersistentArrayHolder, AbstractPersistentCollection, PersistentBag, PersistentList, PersistentMapElementHolder, PersistentIndexedElementHolder, PersistentListElementHolder, PersistentElementHolder, PersistentSortedMap, PersistentSortedSet, PersistentMap

Persistent collections are treated as value objects by Hibernate. ie. they have no independent existence beyond the object holding a reference to them. Unlike instances of entity classes, they are automatically deleted when unreferenced and automatically become persistent when held by a persistent object. Collections can be passed between different objects (change "roles") and this might cause their elements to move from one database table to another.

Hibernate "wraps" a java collection in an instance of PersistentCollection. This mechanism is designed to support tracking of changes to the collection's persistent state and lazy instantiation of collection elements. The downside is that only certain abstract collection types are supported and any extra semantics are lost

Applications should never use classes in this package directly, unless extending the "framework" here.

Changes to structure of the collection are recorded by the collection calling back to the session. Changes to mutable elements (ie. composite elements) are discovered by cloning their state when the collection is initialized and comparing at flush time.
Method from org.hibernate.collection.PersistentCollection Summary:
afterInitialize,   afterRowInsert,   beforeInitialize,   beginRead,   clearDirty,   dirty,   disassemble,   empty,   endRead,   entries,   entryExists,   equalsSnapshot,   forceInitialization,   getDeletes,   getElement,   getIdentifier,   getIndex,   getKey,   getOrphans,   getOwner,   getQueuedOrphans,   getRole,   getSnapshot,   getSnapshotElement,   getStoredSnapshot,   getValue,   hasQueuedOperations,   initializeFromCache,   isDirectlyAccessible,   isDirty,   isRowUpdatePossible,   isSnapshotEmpty,   isUnreferenced,   isWrapper,   needsInserting,   needsRecreate,   needsUpdating,   postAction,   preInsert,   queuedAdditionIterator,   readFrom,   setCurrentSession,   setOwner,   setSnapshot,   unsetSession,   wasInitialized
Method from org.hibernate.collection.PersistentCollection Detail:
 public boolean afterInitialize()
    Called after initializing from cache
 public  void afterRowInsert(CollectionPersister persister,
    Object entry,
    int i) throws HibernateException
    Called after inserting a row, to fetch the natively generated id
 public  void beforeInitialize(CollectionPersister persister,
    int anticipatedSize)
    Called before any elements are read into the collection, allowing appropriate initializations to occur.
 public  void beginRead()
    Called just before reading any rows from the JDBC result set
 public  void clearDirty()
    Clear the dirty flag, after flushing changes to the database.
 public  void dirty()
    Mark the collection as dirty
 public Serializable disassemble(CollectionPersister persister) throws HibernateException
    Disassemble the collection, ready for the cache
 public boolean empty()
    Is the collection empty? (don't try to initialize the collection)
 public boolean endRead()
    Called after reading all rows from the JDBC result set
 public Iterator entries(CollectionPersister persister)
    Iterate all collection entries, during update of the database
 public boolean entryExists(Object entry,
    int i)
    Does an element exist at this entry in the collection?
 public boolean equalsSnapshot(CollectionPersister persister) throws HibernateException
    Does the current state exactly match the snapshot?
 public  void forceInitialization() throws HibernateException
    To be called internally by the session, forcing immediate initialization.
 public Iterator getDeletes(CollectionPersister persister,
    boolean indexIsFormula) throws HibernateException
    Get all the elements that need deleting
 public Object getElement(Object entry)
    Get the value of the given collection entry
 public Object getIdentifier(Object entry,
    int i)
    Get the index of the given collection entry
 public Object getIndex(Object entry,
    int i,
    CollectionPersister persister)
    Get the index of the given collection entry
 public Serializable getKey()
    Get the current collection key value
 public Collection getOrphans(Serializable snapshot,
    String entityName) throws HibernateException
    get all "orphaned" elements
 public Object getOwner()
    Get the owning entity. Note that the owner is only set during the flush cycle, and when a new collection wrapper is created while loading an entity.
 public Collection getQueuedOrphans(String entityName)
    Get the "queued" orphans
 public String getRole()
    Get the current role name
 public Serializable getSnapshot(CollectionPersister persister) throws HibernateException
    Return a new snapshot of the current state of the collection
 public Object getSnapshotElement(Object entry,
    int i)
    Get the snapshot value of the given collection entry
 public Serializable getStoredSnapshot()
    Get the snapshot cached by the collection instance
 public Object getValue()
    return the user-visible collection (or array) instance
 public boolean hasQueuedOperations()
    Does this instance have any "queued" additions?
 public  void initializeFromCache(CollectionPersister persister,
    Serializable disassembled,
    Object owner) throws HibernateException
    Read the state of the collection from a disassembled cached value
 public boolean isDirectlyAccessible()
    Could the application possibly have a direct reference to the underlying collection implementation?
 public boolean isDirty()
    Is the collection dirty? Note that this is only reliable during the flush cycle, after the collection elements are dirty checked against the snapshot.
 public boolean isRowUpdatePossible()
 public boolean isSnapshotEmpty(Serializable snapshot)
    Is the snapshot empty?
 public boolean isUnreferenced()
    Is the collection unreferenced?
 public boolean isWrapper(Object collection)
    Is this the wrapper for the given underlying collection instance?
 public boolean needsInserting(Object entry,
    int i,
    Type elemType) throws HibernateException
    Do we need to insert this element?
 public boolean needsRecreate(CollectionPersister persister)
    Do we need to completely recreate this collection when it changes?
 public boolean needsUpdating(Object entry,
    int i,
    Type elemType) throws HibernateException
    Do we need to update this element?
 public  void postAction()
    After flushing, clear any "queued" additions, since the database state is now synchronized with the memory state.
 public  void preInsert(CollectionPersister persister) throws HibernateException
    Called before inserting rows, to ensure that any surrogate keys are fully generated
 public Iterator queuedAdditionIterator()
    Iterate the "queued" additions
 public Object readFrom(ResultSet rs,
    CollectionPersister role,
    CollectionAliases descriptor,
    Object owner) throws HibernateException, SQLException
    Read a row from the JDBC result set
 public boolean setCurrentSession(SessionImplementor session) throws HibernateException
    Associate the collection with the given session.
 public  void setOwner(Object entity)
    Set the reference to the owning entity
 public  void setSnapshot(Serializable key,
    String role,
    Serializable snapshot)
    After flushing, re-init snapshot state.
 public boolean unsetSession(SessionImplementor currentSession)
    Disassociate this collection from the given session.
 public boolean wasInitialized()
    Is this instance initialized?