org.hibernate.engine
Class StatefulPersistenceContext

java.lang.Object
  extended byorg.hibernate.engine.StatefulPersistenceContext
All Implemented Interfaces:
PersistenceContext

public class StatefulPersistenceContext
extends Object
implements PersistenceContext

A PersistenceContext represents the state of persistent "stuff" which Hibernate is tracking. This includes persistent entities, collections, as well as proxies generated.

There is meant to be a one-to-one correspondence between a SessionImpl and a PersistentContext. The SessionImpl uses the PersistentContext to track the current state of its context. Event-listeners then use the PersistentContext to drive their processing.

Author:
Steve Ebersole

Field Summary
static Object NO_ROW
           
 
Constructor Summary
StatefulPersistenceContext(SessionImplementor session)
          Constructs a PersistentContext, bound to the given session.
 
Method Summary
 void addCollectionHolder(PersistentCollection holder)
          Register a PersistentCollection object for an array.
 void addEntity(EntityKey key, Object entity)
          Add a canonical mapping from entity key to entity instance
 void addEntity(EntityUniqueKey euk, Object entity)
          Add an entity to the cache by unique key
 EntityEntry addEntity(Object entity, Status status, Object[] loadedState, EntityKey entityKey, Object version, LockMode lockMode, boolean existsInDatabase, EntityPersister persister, boolean disableVersionIncrement, boolean lazyPropertiesAreUnfetched)
          Adds an entity to the internal caches.
 EntityEntry addEntry(Object entity, Status status, Object[] loadedState, Object rowId, Serializable id, Object version, LockMode lockMode, boolean existsInDatabase, EntityPersister persister, boolean disableVersionIncrement, boolean lazyPropertiesAreUnfetched)
          Generates an appropriate EntityEntry instance and adds it to the event source's internal caches.
 CollectionEntry addInitializedCollection(CollectionPersister persister, PersistentCollection collection, Serializable id)
          add a collection we just pulled out of the cache (does not need initializing)
 void addInitializedDetachedCollection(CollectionPersister collectionPersister, PersistentCollection collection)
          add an (initialized) collection that was created by another session and passed into update() (ie.
 void addNewCollection(CollectionPersister persister, PersistentCollection collection)
          Add a new collection (ie.
 void addNonLazyCollection(PersistentCollection collection)
          Register a collection for non-lazy loading at the end of the two-phase load
 void addNullProperty(EntityKey ownerKey, String propertyName)
          Record the fact that the association belonging to the keyed entity is null.
 void addProxy(EntityKey key, Object proxy)
          Add a proxy to the session cache
 void addUninitializedCollection(CollectionPersister persister, PersistentCollection collection, Serializable id)
          add a collection we just loaded up (still needs initializing)
 void addUninitializedDetachedCollection(CollectionPersister persister, PersistentCollection collection)
          add a detached uninitialized collection
 void addUnownedCollection(CollectionKey key, PersistentCollection collection)
          Add a collection which has no owner loaded
 void afterLoad()
          Call this after finishing a two-phase load
 void afterTransactionCompletion()
          Called after transactions end
 void beforeLoad()
          Call this before begining a two-phase load
 void checkUniqueness(EntityKey key, Object object)
          Attempts to check whether the given key represents an entity already loaded within the current session.
 void clear()
          Clear the state of the persistence context
 boolean containsCollection(PersistentCollection collection)
          Is the given collection associated with this persistence context?
 boolean containsEntity(EntityKey key)
          Is there an entity with the given key in the persistence context
 boolean containsProxy(Object entity)
          Is the given proxy associated with this persistence context?
 int decrementCascadeLevel()
          Called after cascading
static StatefulPersistenceContext deserialize(ObjectInputStream ois, SessionImplementor session)
           
 BatchFetchQueue getBatchFetchQueue()
          Get the BatchFetchQueue, instantiating one if necessary.
 Object[] getCachedDatabaseSnapshot(EntityKey key)
          Retrieve the cached database snapshot for the requested entity key.
 int getCascadeLevel()
          Do we already know that the entity does not exist in the database?
 PersistentCollection getCollection(CollectionKey collectionKey)
          Get the collection instance associated with the CollectionKey
 Map getCollectionEntries()
          Get the mapping from collection instance to collection entry
 CollectionEntry getCollectionEntry(PersistentCollection coll)
          Get the collection entry for a persistent collection
 CollectionEntry getCollectionEntryOrNull(Object collection)
          Get the collection entry for a collection passed to filter, which might be a collection wrapper, an array, or an unwrapped collection.
 PersistentCollection getCollectionHolder(Object array)
          Get the PersistentCollection object for an array
 Object getCollectionOwner(Serializable key, CollectionPersister collectionPersister)
          Get the entity that owns this persistent collection
 Map getCollectionsByKey()
          Get the mapping from collection key to collection instance
 Object[] getDatabaseSnapshot(Serializable id, EntityPersister persister)
          Get the current state of the entity as known to the underlying database, or null if there is no corresponding row
 Map getEntitiesByKey()
          Get the mapping from key value to entity instance
 Object getEntity(EntityKey key)
          Get the entity instance associated with the given EntityKey
 Object getEntity(EntityUniqueKey euk)
          Get an entity cached by unique key
 Map getEntityEntries()
          Get the mapping from entity instance to entity entry
 EntityEntry getEntry(Object entity)
          Retreive the EntityEntry representation of the given entity.
 Object getIndexInOwner(String entity, String property, Object childEntity, Map mergeMap)
          Search the persistence context for an index of the child object, given a collection role
 LoadContexts getLoadContexts()
          Retrieve this persistence context's managed load context.
 Serializable getLoadedCollectionOwnerIdOrNull(PersistentCollection collection)
          Get the ID for the entity that owned this persistent collection when it was loaded
 Object getLoadedCollectionOwnerOrNull(PersistentCollection collection)
          Get the entity that owned this persistent collection when it was loaded
 Object[] getNaturalIdSnapshot(Serializable id, EntityPersister persister)
          Get the values of the natural id fields as known to the underlying database, or null if the entity has no natural id or there is no corresponding row.
 HashSet getNullifiableEntityKeys()
          Retrieve the set of EntityKeys representing nullifiable references
 Serializable getOwnerId(String entityName, String propertyName, Object childEntity, Map mergeMap)
          Search this persistence context for an associated entity instance which is considered the "owner" of the given childEntity, and return that owner's id value.
 Object getProxy(EntityKey key)
          Get an existing proxy by key
 SessionImplementor getSession()
          Get the session to which this persistence context is bound.
 Serializable getSnapshot(PersistentCollection coll)
          Get the snapshot of the pre-flush collection state
 boolean hasNonReadOnlyEntities()
           
 int incrementCascadeLevel()
          Called before cascading
 void initializeNonLazyCollections()
          Force initialization of all non-lazy collections encountered during the current two-phase load (actually, this is a no-op, unless this is the "outermost" load)
 boolean isEntryFor(Object entity)
          Is there an EntityEntry for this instance?
 boolean isFlushing()
          Is a flush cycle currently in process?
 boolean isPropertyNull(EntityKey ownerKey, String propertyName)
          Is the association property belonging to the keyed entity null?
 boolean isStateless()
           
 Object narrowProxy(Object proxy, EntityPersister persister, EntityKey key, Object object)
          If the existing proxy is insufficiently "narrow" (derived), instantiate a new proxy and overwrite the registration of the old one.
 Object proxyFor(EntityPersister persister, EntityKey key, Object impl)
          Return the existing proxy associated with the given EntityKey, or the third argument (the entity associated with the key) if no proxy exists.
 Object proxyFor(Object impl)
          Return the existing proxy associated with the given EntityKey, or the argument (the entity associated with the key) if no proxy exists.
 boolean reassociateIfUninitializedProxy(Object value)
          Takes the given object and, if it represents a proxy, reassociates it with this event source.
 void reassociateProxy(Object value, Serializable id)
          If a deleted entity instance is re-saved, and it has a proxy, we need to reset the identifier of the proxy
 PersistentCollection removeCollectionHolder(Object array)
          Remove the mapping of collection to holder during eviction of the owning entity
 Object removeEntity(EntityKey key)
          Remove an entity from the session cache, also clear up other state associated with the entity, all except for the EntityEntry
 EntityEntry removeEntry(Object entity)
          Remove an entity entry from the session cache
 Object removeProxy(EntityKey key)
          Remove a proxy from the session cache.
 void replaceDelayedEntityIdentityInsertKeys(EntityKey oldKey, Serializable generatedId)
           
 void serialize(ObjectOutputStream oos)
          Used by the owning session to explicitly control serialization of the persistence context.
 void setEntryStatus(EntityEntry entry, Status status)
          Set the status of an entry
 void setFlushing(boolean flushing)
          Called before and after the flushcycle
 void setReadOnly(Object entity, boolean readOnly)
          Set the object to read only and discard it's snapshot
 String toString()
          Returns a string representation of the object.
 Object unproxy(Object maybeProxy)
          Get the entity instance underlying the given proxy, throwing an exception if the proxy is uninitialized.
 Object unproxyAndReassociate(Object maybeProxy)
          Possibly unproxy the given reference and reassociate it with the current session.
 PersistentCollection useUnownedCollection(CollectionKey key)
          Get and remove a collection whose owner is not yet loaded, when its owner is being loaded
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NO_ROW

public static final Object NO_ROW
Constructor Detail

StatefulPersistenceContext

public StatefulPersistenceContext(SessionImplementor session)
Constructs a PersistentContext, bound to the given session.

Parameters:
session - The session "owning" this context.
Method Detail

isStateless

public boolean isStateless()
Specified by:
isStateless in interface PersistenceContext

getSession

public SessionImplementor getSession()
Description copied from interface: PersistenceContext
Get the session to which this persistence context is bound.

Specified by:
getSession in interface PersistenceContext
Returns:
The session.

getLoadContexts

public LoadContexts getLoadContexts()
Description copied from interface: PersistenceContext
Retrieve this persistence context's managed load context.

Specified by:
getLoadContexts in interface PersistenceContext
Returns:
The load context

addUnownedCollection

public void addUnownedCollection(CollectionKey key,
                                 PersistentCollection collection)
Description copied from interface: PersistenceContext
Add a collection which has no owner loaded

Specified by:
addUnownedCollection in interface PersistenceContext

useUnownedCollection

public PersistentCollection useUnownedCollection(CollectionKey key)
Description copied from interface: PersistenceContext
Get and remove a collection whose owner is not yet loaded, when its owner is being loaded

Specified by:
useUnownedCollection in interface PersistenceContext

getBatchFetchQueue

public BatchFetchQueue getBatchFetchQueue()
Get the BatchFetchQueue, instantiating one if necessary.

Specified by:
getBatchFetchQueue in interface PersistenceContext

clear

public void clear()
Description copied from interface: PersistenceContext
Clear the state of the persistence context

Specified by:
clear in interface PersistenceContext

hasNonReadOnlyEntities

public boolean hasNonReadOnlyEntities()
Specified by:
hasNonReadOnlyEntities in interface PersistenceContext
Returns:
false if we know for certain that all the entities are read-only

setEntryStatus

public void setEntryStatus(EntityEntry entry,
                           Status status)
Description copied from interface: PersistenceContext
Set the status of an entry

Specified by:
setEntryStatus in interface PersistenceContext

afterTransactionCompletion

public void afterTransactionCompletion()
Description copied from interface: PersistenceContext
Called after transactions end

Specified by:
afterTransactionCompletion in interface PersistenceContext

getDatabaseSnapshot

public Object[] getDatabaseSnapshot(Serializable id,
                                    EntityPersister persister)
                             throws HibernateException
Get the current state of the entity as known to the underlying database, or null if there is no corresponding row

Specified by:
getDatabaseSnapshot in interface PersistenceContext
Throws:
HibernateException

getNaturalIdSnapshot

public Object[] getNaturalIdSnapshot(Serializable id,
                                     EntityPersister persister)
                              throws HibernateException
Description copied from interface: PersistenceContext
Get the values of the natural id fields as known to the underlying database, or null if the entity has no natural id or there is no corresponding row.

Specified by:
getNaturalIdSnapshot in interface PersistenceContext
Throws:
HibernateException

getCachedDatabaseSnapshot

public Object[] getCachedDatabaseSnapshot(EntityKey key)
Retrieve the cached database snapshot for the requested entity key.

This differs from getDatabaseSnapshot(java.io.Serializable, org.hibernate.persister.entity.EntityPersister) is two important respects:

  1. no snapshot is obtained from the database if not already cached
  2. an entry of NO_ROW here is interpretet as an exception

Specified by:
getCachedDatabaseSnapshot in interface PersistenceContext
Parameters:
key - The entity key for which to retrieve the cached snapshot
Returns:
The cached snapshot
Throws:
IllegalStateException - if the cached snapshot was == NO_ROW.

addEntity

public void addEntity(EntityKey key,
                      Object entity)
Description copied from interface: PersistenceContext
Add a canonical mapping from entity key to entity instance

Specified by:
addEntity in interface PersistenceContext

getEntity

public Object getEntity(EntityKey key)
Get the entity instance associated with the given EntityKey

Specified by:
getEntity in interface PersistenceContext

containsEntity

public boolean containsEntity(EntityKey key)
Description copied from interface: PersistenceContext
Is there an entity with the given key in the persistence context

Specified by:
containsEntity in interface PersistenceContext

removeEntity

public Object removeEntity(EntityKey key)
Remove an entity from the session cache, also clear up other state associated with the entity, all except for the EntityEntry

Specified by:
removeEntity in interface PersistenceContext

getEntity

public Object getEntity(EntityUniqueKey euk)
Get an entity cached by unique key

Specified by:
getEntity in interface PersistenceContext

addEntity

public void addEntity(EntityUniqueKey euk,
                      Object entity)
Add an entity to the cache by unique key

Specified by:
addEntity in interface PersistenceContext

getEntry

public EntityEntry getEntry(Object entity)
Retreive the EntityEntry representation of the given entity.

Specified by:
getEntry in interface PersistenceContext
Parameters:
entity - The entity for which to locate the EntityEntry.
Returns:
The EntityEntry for the given entity.

removeEntry

public EntityEntry removeEntry(Object entity)
Remove an entity entry from the session cache

Specified by:
removeEntry in interface PersistenceContext

isEntryFor

public boolean isEntryFor(Object entity)
Is there an EntityEntry for this instance?

Specified by:
isEntryFor in interface PersistenceContext

getCollectionEntry

public CollectionEntry getCollectionEntry(PersistentCollection coll)
Get the collection entry for a persistent collection

Specified by:
getCollectionEntry in interface PersistenceContext

addEntity

public EntityEntry addEntity(Object entity,
                             Status status,
                             Object[] loadedState,
                             EntityKey entityKey,
                             Object version,
                             LockMode lockMode,
                             boolean existsInDatabase,
                             EntityPersister persister,
                             boolean disableVersionIncrement,
                             boolean lazyPropertiesAreUnfetched)
Adds an entity to the internal caches.

Specified by:
addEntity in interface PersistenceContext

addEntry

public EntityEntry addEntry(Object entity,
                            Status status,
                            Object[] loadedState,
                            Object rowId,
                            Serializable id,
                            Object version,
                            LockMode lockMode,
                            boolean existsInDatabase,
                            EntityPersister persister,
                            boolean disableVersionIncrement,
                            boolean lazyPropertiesAreUnfetched)
Generates an appropriate EntityEntry instance and adds it to the event source's internal caches.

Specified by:
addEntry in interface PersistenceContext

containsCollection

public boolean containsCollection(PersistentCollection collection)
Description copied from interface: PersistenceContext
Is the given collection associated with this persistence context?

Specified by:
containsCollection in interface PersistenceContext

containsProxy

public boolean containsProxy(Object entity)
Description copied from interface: PersistenceContext
Is the given proxy associated with this persistence context?

Specified by:
containsProxy in interface PersistenceContext

reassociateIfUninitializedProxy

public boolean reassociateIfUninitializedProxy(Object value)
                                        throws MappingException
Takes the given object and, if it represents a proxy, reassociates it with this event source.

Specified by:
reassociateIfUninitializedProxy in interface PersistenceContext
Parameters:
value - The possible proxy to be reassociated.
Returns:
Whether the passed value represented an actual proxy which got initialized.
Throws:
MappingException

reassociateProxy

public void reassociateProxy(Object value,
                             Serializable id)
                      throws MappingException
If a deleted entity instance is re-saved, and it has a proxy, we need to reset the identifier of the proxy

Specified by:
reassociateProxy in interface PersistenceContext
Throws:
MappingException

unproxy

public Object unproxy(Object maybeProxy)
               throws HibernateException
Get the entity instance underlying the given proxy, throwing an exception if the proxy is uninitialized. If the given object is not a proxy, simply return the argument.

Specified by:
unproxy in interface PersistenceContext
Throws:
HibernateException

unproxyAndReassociate

public Object unproxyAndReassociate(Object maybeProxy)
                             throws HibernateException
Possibly unproxy the given reference and reassociate it with the current session.

Specified by:
unproxyAndReassociate in interface PersistenceContext
Parameters:
maybeProxy - The reference to be unproxied if it currently represents a proxy.
Returns:
The unproxied instance.
Throws:
HibernateException

checkUniqueness

public void checkUniqueness(EntityKey key,
                            Object object)
                     throws HibernateException
Attempts to check whether the given key represents an entity already loaded within the current session.

Specified by:
checkUniqueness in interface PersistenceContext
Parameters:
object - The entity reference against which to perform the uniqueness check.
Throws:
HibernateException

narrowProxy

public Object narrowProxy(Object proxy,
                          EntityPersister persister,
                          EntityKey key,
                          Object object)
                   throws HibernateException
If the existing proxy is insufficiently "narrow" (derived), instantiate a new proxy and overwrite the registration of the old one. This breaks == and occurs only for "class" proxies rather than "interface" proxies. Also init the proxy to point to the given target implementation if necessary.

Specified by:
narrowProxy in interface PersistenceContext
Parameters:
proxy - The proxy instance to be narrowed.
persister - The persister for the proxied entity.
key - The internal cache key for the proxied entity.
object - (optional) the actual proxied entity instance.
Returns:
An appropriately narrowed instance.
Throws:
HibernateException

proxyFor

public Object proxyFor(EntityPersister persister,
                       EntityKey key,
                       Object impl)
                throws HibernateException
Return the existing proxy associated with the given EntityKey, or the third argument (the entity associated with the key) if no proxy exists. Init the proxy to the target implementation, if necessary.

Specified by:
proxyFor in interface PersistenceContext
Throws:
HibernateException

proxyFor

public Object proxyFor(Object impl)
                throws HibernateException
Return the existing proxy associated with the given EntityKey, or the argument (the entity associated with the key) if no proxy exists. (slower than the form above)

Specified by:
proxyFor in interface PersistenceContext
Throws:
HibernateException

getCollectionOwner

public Object getCollectionOwner(Serializable key,
                                 CollectionPersister collectionPersister)
                          throws MappingException
Get the entity that owns this persistent collection

Specified by:
getCollectionOwner in interface PersistenceContext
Throws:
MappingException

getLoadedCollectionOwnerOrNull

public Object getLoadedCollectionOwnerOrNull(PersistentCollection collection)
Get the entity that owned this persistent collection when it was loaded

Specified by:
getLoadedCollectionOwnerOrNull in interface PersistenceContext
Parameters:
collection - The persistent collection
Returns:
the owner, if its entity ID is available from the collection's loaded key and the owner entity is in the persistence context; otherwise, returns null

getLoadedCollectionOwnerIdOrNull

public Serializable getLoadedCollectionOwnerIdOrNull(PersistentCollection collection)
Get the ID for the entity that owned this persistent collection when it was loaded

Specified by:
getLoadedCollectionOwnerIdOrNull in interface PersistenceContext
Parameters:
collection - The persistent collection
Returns:
the owner ID if available from the collection's loaded key; otherwise, returns null

addUninitializedCollection

public void addUninitializedCollection(CollectionPersister persister,
                                       PersistentCollection collection,
                                       Serializable id)
add a collection we just loaded up (still needs initializing)

Specified by:
addUninitializedCollection in interface PersistenceContext

addUninitializedDetachedCollection

public void addUninitializedDetachedCollection(CollectionPersister persister,
                                               PersistentCollection collection)
add a detached uninitialized collection

Specified by:
addUninitializedDetachedCollection in interface PersistenceContext

addNewCollection

public void addNewCollection(CollectionPersister persister,
                             PersistentCollection collection)
                      throws HibernateException
Add a new collection (ie. a newly created one, just instantiated by the application, with no database state or snapshot)

Specified by:
addNewCollection in interface PersistenceContext
Parameters:
collection - The collection to be associated with the persistence context
Throws:
HibernateException

addInitializedDetachedCollection

public void addInitializedDetachedCollection(CollectionPersister collectionPersister,
                                             PersistentCollection collection)
                                      throws HibernateException
add an (initialized) collection that was created by another session and passed into update() (ie. one with a snapshot and existing state on the database)

Specified by:
addInitializedDetachedCollection in interface PersistenceContext
Throws:
HibernateException

addInitializedCollection

public CollectionEntry addInitializedCollection(CollectionPersister persister,
                                                PersistentCollection collection,
                                                Serializable id)
                                         throws HibernateException
add a collection we just pulled out of the cache (does not need initializing)

Specified by:
addInitializedCollection in interface PersistenceContext
Throws:
HibernateException

getCollection

public PersistentCollection getCollection(CollectionKey collectionKey)
Get the collection instance associated with the CollectionKey

Specified by:
getCollection in interface PersistenceContext

addNonLazyCollection

public void addNonLazyCollection(PersistentCollection collection)
Register a collection for non-lazy loading at the end of the two-phase load

Specified by:
addNonLazyCollection in interface PersistenceContext

initializeNonLazyCollections

public void initializeNonLazyCollections()
                                  throws HibernateException
Force initialization of all non-lazy collections encountered during the current two-phase load (actually, this is a no-op, unless this is the "outermost" load)

Specified by:
initializeNonLazyCollections in interface PersistenceContext
Throws:
HibernateException

getCollectionHolder

public PersistentCollection getCollectionHolder(Object array)
Get the PersistentCollection object for an array

Specified by:
getCollectionHolder in interface PersistenceContext

addCollectionHolder

public void addCollectionHolder(PersistentCollection holder)
Register a PersistentCollection object for an array. Associates a holder with an array - MUST be called after loading array, since the array instance is not created until endLoad().

Specified by:
addCollectionHolder in interface PersistenceContext

removeCollectionHolder

public PersistentCollection removeCollectionHolder(Object array)
Description copied from interface: PersistenceContext
Remove the mapping of collection to holder during eviction of the owning entity

Specified by:
removeCollectionHolder in interface PersistenceContext

getSnapshot

public Serializable getSnapshot(PersistentCollection coll)
Get the snapshot of the pre-flush collection state

Specified by:
getSnapshot in interface PersistenceContext

getCollectionEntryOrNull

public CollectionEntry getCollectionEntryOrNull(Object collection)
Get the collection entry for a collection passed to filter, which might be a collection wrapper, an array, or an unwrapped collection. Return null if there is no entry.

Specified by:
getCollectionEntryOrNull in interface PersistenceContext

getProxy

public Object getProxy(EntityKey key)
Get an existing proxy by key

Specified by:
getProxy in interface PersistenceContext

addProxy

public void addProxy(EntityKey key,
                     Object proxy)
Add a proxy to the session cache

Specified by:
addProxy in interface PersistenceContext

removeProxy

public Object removeProxy(EntityKey key)
Remove a proxy from the session cache.

Additionally, ensure that any load optimization references such as batch or subselect loading get cleaned up as well.

Specified by:
removeProxy in interface PersistenceContext
Parameters:
key - The key of the entity proxy to be removed
Returns:
The proxy reference.

getNullifiableEntityKeys

public HashSet getNullifiableEntityKeys()
Retrieve the set of EntityKeys representing nullifiable references

Specified by:
getNullifiableEntityKeys in interface PersistenceContext

getEntitiesByKey

public Map getEntitiesByKey()
Description copied from interface: PersistenceContext
Get the mapping from key value to entity instance

Specified by:
getEntitiesByKey in interface PersistenceContext

getEntityEntries

public Map getEntityEntries()
Description copied from interface: PersistenceContext
Get the mapping from entity instance to entity entry

Specified by:
getEntityEntries in interface PersistenceContext

getCollectionEntries

public Map getCollectionEntries()
Description copied from interface: PersistenceContext
Get the mapping from collection instance to collection entry

Specified by:
getCollectionEntries in interface PersistenceContext

getCollectionsByKey

public Map getCollectionsByKey()
Description copied from interface: PersistenceContext
Get the mapping from collection key to collection instance

Specified by:
getCollectionsByKey in interface PersistenceContext

getCascadeLevel

public int getCascadeLevel()
Do we already know that the entity does not exist in the database?

Specified by:
getCascadeLevel in interface PersistenceContext

incrementCascadeLevel

public int incrementCascadeLevel()
Description copied from interface: PersistenceContext
Called before cascading

Specified by:
incrementCascadeLevel in interface PersistenceContext

decrementCascadeLevel

public int decrementCascadeLevel()
Description copied from interface: PersistenceContext
Called after cascading

Specified by:
decrementCascadeLevel in interface PersistenceContext

isFlushing

public boolean isFlushing()
Description copied from interface: PersistenceContext
Is a flush cycle currently in process?

Specified by:
isFlushing in interface PersistenceContext

setFlushing

public void setFlushing(boolean flushing)
Description copied from interface: PersistenceContext
Called before and after the flushcycle

Specified by:
setFlushing in interface PersistenceContext

beforeLoad

public void beforeLoad()
Call this before begining a two-phase load

Specified by:
beforeLoad in interface PersistenceContext

afterLoad

public void afterLoad()
Call this after finishing a two-phase load

Specified by:
afterLoad in interface PersistenceContext

toString

public String toString()
Returns a string representation of the object.

Specified by:
toString in interface PersistenceContext
Returns:
a string representation of the object.

getOwnerId

public Serializable getOwnerId(String entityName,
                               String propertyName,
                               Object childEntity,
                               Map mergeMap)
Search this persistence context for an associated entity instance which is considered the "owner" of the given childEntity, and return that owner's id value. This is performed in the scenario of a uni-directional, non-inverse one-to-many collection (which means that the collection elements do not maintain a direct reference to the owner).

As such, the processing here is basically to loop over every entity currently associated with this persistence context and for those of the correct entity (sub) type to extract its collection role property value and see if the child is contained within that collection. If so, we have found the owner; if not, we go on.

Also need to account for mergeMap which acts as a local copy cache managed for the duration of a merge operation. It represents a map of the detached entity instances pointing to the corresponding managed instance.

Specified by:
getOwnerId in interface PersistenceContext
Parameters:
entityName - The entity name for the entity type which would own the child
propertyName - The name of the property on the owning entity type which would name this child association.
childEntity - The child entity instance for which to locate the owner instance id.
mergeMap - A map of non-persistent instances from an on-going merge operation (possibly null).
Returns:
The id of the entityName instance which is said to own the child; null if an appropriate owner not located.

getIndexInOwner

public Object getIndexInOwner(String entity,
                              String property,
                              Object childEntity,
                              Map mergeMap)
Search the persistence context for an index of the child object, given a collection role

Specified by:
getIndexInOwner in interface PersistenceContext

addNullProperty

public void addNullProperty(EntityKey ownerKey,
                            String propertyName)
Record the fact that the association belonging to the keyed entity is null.

Specified by:
addNullProperty in interface PersistenceContext

isPropertyNull

public boolean isPropertyNull(EntityKey ownerKey,
                              String propertyName)
Is the association property belonging to the keyed entity null?

Specified by:
isPropertyNull in interface PersistenceContext

setReadOnly

public void setReadOnly(Object entity,
                        boolean readOnly)
Description copied from interface: PersistenceContext
Set the object to read only and discard it's snapshot

Specified by:
setReadOnly in interface PersistenceContext

replaceDelayedEntityIdentityInsertKeys

public void replaceDelayedEntityIdentityInsertKeys(EntityKey oldKey,
                                                   Serializable generatedId)
Specified by:
replaceDelayedEntityIdentityInsertKeys in interface PersistenceContext

serialize

public void serialize(ObjectOutputStream oos)
               throws IOException
Used by the owning session to explicitly control serialization of the persistence context.

Parameters:
oos - The stream to which the persistence context should get written
Throws:
IOException - serialization errors.

deserialize

public static StatefulPersistenceContext deserialize(ObjectInputStream ois,
                                                     SessionImplementor session)
                                              throws IOException,
                                                     ClassNotFoundException
Throws:
IOException
ClassNotFoundException