Package org.apache.cayenne.access
Class DataContext
java.lang.Object
org.apache.cayenne.BaseContext
org.apache.cayenne.access.DataContext
- All Implemented Interfaces:
- Serializable,- DataChannel,- ObjectContext
public class DataContext extends BaseContext
The most common implementation of 
ObjectContext. DataContext is an
 isolated container of an object graph, in a sense that any uncommitted
 changes to persistent objects that are registered with the context, are not
 visible to the users of other contexts.- See Also:
- Serialized Form
- 
Field SummaryFields Modifier and Type Field Description protected org.apache.cayenne.access.DataContextMergeHandlermergeHandlerprotected ObjectStoreobjectStoreprotected TransactionFactorytransactionFactoryDeprecated.since 4.0 used in a method that itself should be deprecated, so this is a temp codeprotected booleanusingSharedSnaphsotCacheFields inherited from class org.apache.cayenne.BaseContextchannel, entityResolver, graphAction, queryCache, threadObjectContext, userProperties, validatingObjectsOnCommitFields inherited from interface org.apache.cayenne.DataChannelFLUSH_CASCADE_SYNC, FLUSH_NOCASCADE_SYNC, GRAPH_CHANGED_SUBJECT, GRAPH_FLUSHED_SUBJECT, GRAPH_ROLLEDBACK_SUBJECT, ROLLBACK_CASCADE_SYNC
- 
Constructor SummaryConstructors Constructor Description DataContext()Creates a new DataContext that is not attached to the Cayenne stack.DataContext(DataChannel channel, ObjectStore objectStore)Creates a new DataContext with parent DataChannel and ObjectStore.
- 
Method SummaryModifier and Type Method Description protected voidattachToChannel(DataChannel channel)Attaches to a provided DataChannel.protected voidattachToRuntime(Injector injector)Attaches this context to the CayenneRuntime whose Injector is passed as an argument to this method.voidcommitChanges()Synchronizes object graph with the database.voidcommitChangesToParent()"Flushes" the changes to the parentDataChannel.DataRowcurrentSnapshot(Persistent object)Returns a DataRow reflecting current, possibly uncommitted, object state.Collection<?>deletedObjects()Returns a list of objects that are registered with this DataContext and have a state PersistenceState.DELETEDprotected voidfireDataChannelChanged(Object postedBy, GraphDiff changes)DataContextDelegategetDelegate()Returns a delegate currently associated with this DataContext.GraphManagergetGraphManager()Returns this context's ObjectStore.ObjectStoregetObjectStore()Returns ObjectStore associated with this DataContext.DataDomaingetParentDataDomain()Returns a DataDomain used by this DataContext.booleanhasChanges()Returnstrueif there are any modified, deleted or new objects registered with this DataContext,falseotherwise.booleanisUsingSharedSnapshotCache()Returnstrueif the ObjectStore uses shared cache of a parent DataDomain.<T> ResultIterator<T>iterator(Select<T> query)Creates a ResultIterator based on the provided query.Collection<?>modifiedObjects()Returns a list of objects that are registered with this DataContext and have a state PersistenceState.MODIFIED<T> TnewObject(Class<T> persistentClass)Creates and registers a new persistent object.PersistentnewObject(String entityName)Instantiates a new object and registers it with this context.Collection<?>newObjects()Returns a list of objects that are registered with this DataContext and have a state PersistenceState.NEW<T extends Persistent>
 TobjectFromDataRow(Class<T> objectClass, DataRow dataRow)Creates a DataObject from DataRow.DataObjectobjectFromDataRow(String entityName, DataRow dataRow)Creates a DataObject from DataRow.ListobjectsFromDataRows(ClassDescriptor descriptor, List<? extends DataRow> dataRows)Converts a list of DataRows to a List of DataObject registered with this DataContext.protected GraphDiffonContextFlush(ObjectContext originatingContext, GraphDiff changes, boolean cascade)QueryResponseonQuery(ObjectContext context, Query query)An implementation of aDataChannelmethod that is used by child contexts to execute queries.QueryResponseperformGenericQuery(Query query)Executes a query returning a generic response.ResultIteratorperformIteratedQuery(Query query)Performs a single database select query returning result as a ResultIterator.int[]performNonSelectingQuery(String queryName)Performs a named mapped query that does not select rows.int[]performNonSelectingQuery(String queryName, Map<String,?> parameters)Performs a named mapped non-selecting query using a map of parameters.int[]performNonSelectingQuery(Query query)Performs a single database query that does not select rows.List<?>performQuery(String queryName, boolean expireCachedLists)Returns a list of objects or DataRows for a named query stored in one of the DataMaps.List<?>performQuery(String queryName, Map parameters, boolean expireCachedLists)Returns a list of objects or DataRows for a named query stored in one of the DataMaps.ListperformQuery(Query query)Performs a single selecting query.voidregisterNewObject(Object object)Registers a transient object with the context, recursively registering all transient persistent objects attached to this object via relationships.voidrollbackChanges()Reverts any changes that have occurred to objects registered with DataContext; also performs cascading rollback of all parent DataContexts.voidrollbackChangesLocally()If the parent channel is a DataContext, reverts local changes to make this context look like the parent, if the parent channel is a DataDomain, reverts all changes.voidsetDelegate(DataContextDelegate delegate)Sets a DataContextDelegate for this context.voidsetTransactionFactory(TransactionFactory transactionFactory)Deprecated.since 4.0 avoid using this directly.voidsetUsingSharedSnapshotCache(boolean flag)Collection<?>uncommittedObjects()Returns a collection of all uncommitted registered objects.voidunregisterObjects(Collection dataObjects)Unregisters a Collection of DataObjects from the DataContext and the underlying ObjectStore.Methods inherited from class org.apache.cayenne.BaseContextattachToRuntimeIfNeeded, batchIterator, bindThreadObjectContext, deleteObject, deleteObjects, deleteObjects, fireDataChannelCommitted, fireDataChannelRolledback, getChannel, getEntityResolver, getEventManager, getQueryCache, getThreadObjectContext, getUserProperties, getUserProperty, injectInitialValue, invalidateObjects, invalidateObjects, isValidatingObjectsOnCommit, iterate, localObject, onSync, prepareForAccess, propertyChanged, select, selectFirst, selectOne, setChannel, setEntityResolver, setQueryCache, setUserProperty, setValidatingObjectsOnCommit
- 
Field Details
- 
objectStore
- 
transactionFactoryDeprecated.since 4.0 used in a method that itself should be deprecated, so this is a temp code
- 
mergeHandlerprotected transient org.apache.cayenne.access.DataContextMergeHandler mergeHandler
 
- 
Constructor Details- 
DataContextpublic DataContext()Creates a new DataContext that is not attached to the Cayenne stack.
- 
DataContextCreates a new DataContext with parent DataChannel and ObjectStore.- Since:
- 1.2
 
 
- 
- 
Method Details- 
attachToRuntimeDescription copied from class:BaseContextAttaches this context to the CayenneRuntime whose Injector is passed as an argument to this method.- Overrides:
- attachToRuntimein class- BaseContext
 
- 
attachToChannelDescription copied from class:BaseContextAttaches to a provided DataChannel.- Overrides:
- attachToChannelin class- BaseContext
- Since:
- 3.1
 
- 
getParentDataDomainReturns a DataDomain used by this DataContext. DataDomain is looked up in the DataChannel hierarchy. If a channel is not a DataDomain or a DataContext, null is returned.- Returns:
- DataDomain that is a direct or indirect parent of this DataContext in the DataChannel hierarchy.
- Since:
- 1.1
 
- 
setDelegateSets a DataContextDelegate for this context. Delegate is notified of certain events in the DataContext lifecycle and can customize DataContext behavior.- Since:
- 1.1
 
- 
getDelegateReturns a delegate currently associated with this DataContext.- Since:
- 1.1
 
- 
getObjectStoreReturns ObjectStore associated with this DataContext.
- 
hasChangespublic boolean hasChanges()Returnstrueif there are any modified, deleted or new objects registered with this DataContext,falseotherwise.
- 
newObjectsReturns a list of objects that are registered with this DataContext and have a state PersistenceState.NEW- Specified by:
- newObjectsin interface- ObjectContext
- Specified by:
- newObjectsin class- BaseContext
 
- 
deletedObjectsReturns a list of objects that are registered with this DataContext and have a state PersistenceState.DELETED- Specified by:
- deletedObjectsin interface- ObjectContext
- Specified by:
- deletedObjectsin class- BaseContext
 
- 
modifiedObjectsReturns a list of objects that are registered with this DataContext and have a state PersistenceState.MODIFIED- Specified by:
- modifiedObjectsin interface- ObjectContext
- Specified by:
- modifiedObjectsin class- BaseContext
 
- 
uncommittedObjectsReturns a collection of all uncommitted registered objects.- Specified by:
- uncommittedObjectsin interface- ObjectContext
- Specified by:
- uncommittedObjectsin class- BaseContext
- Since:
- 1.2
 
- 
currentSnapshotReturns a DataRow reflecting current, possibly uncommitted, object state.Warning: This method will return a partial snapshot if an object or one of its related objects that propagate their keys to this object have temporary ids. DO NOT USE this method if you expect a DataRow to represent a complete object state. - Since:
- 1.1
 
- 
objectsFromDataRowsConverts a list of DataRows to a List of DataObject registered with this DataContext.- Since:
- 3.0
 
- 
objectFromDataRowCreates a DataObject from DataRow.- Since:
- 3.1
- See Also:
- DataRow
 
- 
objectFromDataRowCreates a DataObject from DataRow. This variety of the 'objectFromDataRow' method is normally used for generic classes.- Since:
- 3.1
- See Also:
- DataRow
 
- 
newObjectCreates and registers a new persistent object.- Specified by:
- newObjectin interface- ObjectContext
- Specified by:
- newObjectin class- BaseContext
- Since:
- 1.2
 
- 
newObjectInstantiates a new object and registers it with this context. Object class is determined from the mapped entity. Object class must have a default constructor.Note: in most cases newObject(Class)method should be used, however this method is helpful when generic persistent classes are used.- Since:
- 3.0
 
- 
registerNewObjectRegisters a transient object with the context, recursively registering all transient persistent objects attached to this object via relationships.Note that since 3.0 this method takes Object as an argument instead of a DataObject.- Specified by:
- registerNewObjectin interface- ObjectContext
- Specified by:
- registerNewObjectin class- BaseContext
- Parameters:
- object- new object that needs to be made persistent.
 
- 
unregisterObjectsUnregisters a Collection of DataObjects from the DataContext and the underlying ObjectStore. This operation also unsets DataContext for each object and changes its state to TRANSIENT.
- 
rollbackChangesLocallypublic void rollbackChangesLocally()If the parent channel is a DataContext, reverts local changes to make this context look like the parent, if the parent channel is a DataDomain, reverts all changes.- Specified by:
- rollbackChangesLocallyin interface- ObjectContext
- Specified by:
- rollbackChangesLocallyin class- BaseContext
- Since:
- 1.2
 
- 
rollbackChangespublic void rollbackChanges()Reverts any changes that have occurred to objects registered with DataContext; also performs cascading rollback of all parent DataContexts.- Specified by:
- rollbackChangesin interface- ObjectContext
- Specified by:
- rollbackChangesin class- BaseContext
 
- 
commitChangesToParentpublic void commitChangesToParent()"Flushes" the changes to the parentDataChannel. If the parent channel is a DataContext, it updates its objects with this context's changes, without a database update. If it is a DataDomain (the most common case), the changes are written to the database. To cause cascading commit all the way to the database, one must usecommitChanges().- Specified by:
- commitChangesToParentin interface- ObjectContext
- Specified by:
- commitChangesToParentin class- BaseContext
- Since:
- 1.2
- See Also:
- commitChanges()
 
- 
commitChangesSynchronizes object graph with the database. Executes needed insert, update and delete queries (generated internally).- Specified by:
- commitChangesin interface- ObjectContext
- Specified by:
- commitChangesin class- BaseContext
- Throws:
- CayenneRuntimeException
 
- 
onContextFlushprotected GraphDiff onContextFlush(ObjectContext originatingContext, GraphDiff changes, boolean cascade)- Specified by:
- onContextFlushin class- BaseContext
 
- 
iteratorDescription copied from interface:ObjectContextCreates a ResultIterator based on the provided query. It is usually backed by an open result set and is useful for processing of large data sets, preserving a constant memory footprint. The caller must wrap iteration in try/finally (or try-with-resources for Java 1.7 and higher) and close the ResultIterator explicitly. Or useObjectContext.iterate(Select, ResultIteratorCallback)as an alternative.- Specified by:
- iteratorin interface- ObjectContext
- Specified by:
- iteratorin class- BaseContext
 
- 
performIteratedQueryPerforms a single database select query returning result as a ResultIterator. It is caller's responsibility to explicitly close the ResultIterator. A failure to do so will result in a database connection not being released. Another side effect of an open ResultIterator is that an internal Cayenne transaction that originated in this method stays open until the iterator is closed. So users should normally close the iterator within the same thread that opened it.Note that 'performIteratedQuery' always returns ResultIterator over DataRows. Use BaseContext.iterate(Select, org.apache.cayenne.ResultIteratorCallback)to get access to objects.
- 
performGenericQueryExecutes a query returning a generic response.- Specified by:
- performGenericQueryin interface- ObjectContext
- Specified by:
- performGenericQueryin class- BaseContext
- Since:
- 1.2
 
- 
performQueryPerforms a single selecting query. Various query setting control the behavior of this method and the results returned:- Query caching policy defines whether the results are retrieved from cache or fetched from the database. Note that queries that use caching must have a name that is used as a caching key.
- Query refreshing policy controls whether to refresh existing data objects and ignore any cached values.
- Query data rows policy defines whether the result should be returned as DataObjects or DataRows.
 Since 1.2 takes any Query parameter, not just GenericSelectQuery - Specified by:
- performQueryin interface- ObjectContext
- Specified by:
- performQueryin class- BaseContext
- Returns:
- A list of DataObjects or a DataRows, depending on the value
         returned by QueryMetadata.isFetchingDataRows().
 
- 
onQueryAn implementation of aDataChannelmethod that is used by child contexts to execute queries. Not intended for direct use.- Parameters:
- context- an ObjectContext that originated the query, used to register result objects.
- Returns:
- a generic response object that encapsulates result of the execution.
- Since:
- 1.2
 
- 
performNonSelectingQueryPerforms a single database query that does not select rows. Returns an array of update counts.- Since:
- 1.1
 
- 
performNonSelectingQueryPerforms a named mapped query that does not select rows. Returns an array of update counts.- Since:
- 1.1
 
- 
performNonSelectingQueryPerforms a named mapped non-selecting query using a map of parameters. Returns an array of update counts.- Since:
- 1.1
 
- 
performQueryReturns a list of objects or DataRows for a named query stored in one of the DataMaps. Internally Cayenne uses a caching policy defined in the named query. If refresh flag is true, a refresh is forced no matter what the caching policy is.- Parameters:
- queryName- a name of a GenericSelectQuery defined in one of the DataMaps. If no such query is defined, this method will throw a CayenneRuntimeException.
- expireCachedLists- A flag that determines whether refresh of cached lists is required in case a query uses caching.
- Since:
- 1.1
 
- 
performQueryReturns a list of objects or DataRows for a named query stored in one of the DataMaps. Internally Cayenne uses a caching policy defined in the named query. If refresh flag is true, a refresh is forced no matter what the caching policy is.- Parameters:
- queryName- a name of a GenericSelectQuery defined in one of the DataMaps. If no such query is defined, this method will throw a CayenneRuntimeException.
- parameters- A map of parameters to use with stored query.
- expireCachedLists- A flag that determines whether refresh of cached lists is required in case a query uses caching.
- Since:
- 1.1
 
- 
getGraphManagerReturns this context's ObjectStore.- Specified by:
- getGraphManagerin interface- ObjectContext
- Specified by:
- getGraphManagerin class- BaseContext
- Since:
- 1.2
 
- 
fireDataChannelChanged- Overrides:
- fireDataChannelChangedin class- BaseContext
 
- 
setTransactionFactoryDeprecated.since 4.0 avoid using this directly. Transaction management at this level will be eventually removed- Since:
- 4.0
 
 
-