public abstract class ObjectBuildingQuery extends ReadQuery
Purpose: Abstract class for all read queries that build objects and potentially manipulate the TopLink cache.
Description: Contains common behavior for all read queries building objects.
DatabaseQuery.ParameterType
Modifier and Type | Field and Description |
---|---|
static short |
DEFAULT_LOCK_MODE |
static short |
LOCK |
static short |
LOCK_NOWAIT |
static java.lang.String |
LOCK_RESULT_PROPERTY
INTERNAL: This is the key for accessing unregistered and locked result in the query's properties.
|
static short |
NO_LOCK |
BATCH_FETCH_PROPERTY, CascadeAggregateDelete, CascadeAllParts, CascadeByMapping, CascadeDependentParts, CascadePrivateParts, NoCascading
Constructor and Description |
---|
ObjectBuildingQuery()
INTERNAL: Initialize the state of the query
|
Modifier and Type | Method and Description |
---|---|
java.lang.Object |
clone()
INTERNAL: Clone the query
|
void |
convertClassNamesToClasses(java.lang.ClassLoader classLoader)
INTERNAL: Convert all the class-name-based settings in this query to actual class-based settings.
|
void |
copyFromQuery(DatabaseQuery query)
INTERNAL: Copy all setting from the query.
|
java.lang.Object |
deepClone()
INTERNAL: Clone the query, including its selection criteria.
|
void |
dontRefreshIdentityMapResult()
PUBLIC: When unset means perform read normally and dont do refresh.
|
void |
dontRefreshRemoteIdentityMapResult()
PUBLIC: When unset means perform read normally and dont do refresh.
|
java.util.List |
getDataResults()
INTERNAL: Return all of the rows fetched by the query, used for 1-m joining.
|
FetchGroup |
getExecutionFetchGroup()
INTERNAL: Returns FetchGroup that will be applied to the query.
|
FetchGroup |
getExecutionFetchGroup(ClassDescriptor descriptor)
INTERNAL: Returns FetchGroup that will be applied to the query.
|
long |
getExecutionTime()
INTERNAL: Return the time this query actually went to the database
|
LoadGroup |
getLoadGroup()
Return the load group set in the query.
|
short |
getLockMode()
PUBLIC: Return the current locking mode.
|
java.util.Map<java.lang.Object,org.eclipse.persistence.internal.identitymaps.CacheKey> |
getPrefetchedCacheKeys() |
java.lang.Class |
getReferenceClass()
PUBLIC: Return the reference class of the query.
|
java.lang.String |
getReferenceClassName()
INTERNAL: Return the reference class of the query.
|
boolean |
hasExecutionFetchGroup()
INTERNAL: Indicates whether a FetchGroup will be applied to the query.
|
boolean |
hasPartialAttributeExpressions()
INTERNAL: Return if partial attributes.
|
boolean |
isAttributeJoined(ClassDescriptor mappingDescriptor, java.lang.String attributeName)
INTERNAL: Return if the attribute is specified for joining.
|
boolean |
isCacheCheckComplete()
INTERNAL: Returns true if an early return cache check was completed
|
boolean |
isClonePessimisticLocked(java.lang.Object clone, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Helper method that checks if clone has been locked with uow.
|
boolean |
isDefaultLock()
INTERNAL: Helper method to determine the default mode.
|
boolean |
isLockQuery()
PUBLIC: Answers if the query lock mode is known to be LOCK or LOCK_NOWAIT.
|
boolean |
isObjectBuildingQuery()
PUBLIC: Return if this is an object building query.
|
boolean |
isRegisteringResults()
INTERNAL: Answers if we are executing through a UnitOfWork and registering results.
|
void |
postRegisterIndividualResult(java.lang.Object clone, java.lang.Object original, java.lang.Object primaryKey, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, ClassDescriptor concreteDescriptor)
Post process the object once it is registered in the unit of work.
|
void |
prepareFromQuery(DatabaseQuery query)
INTERNAL: Prepare the query from the prepared query.
|
void |
recordCloneForPessimisticLocking(java.lang.Object clone, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
INTERNAL: Helper method that records clone with uow if query is pessimistic locking.
|
void |
refreshIdentityMapResult()
PUBLIC: Refresh the attributes of the object(s) resulting from the query.
|
void |
refreshRemoteIdentityMapResult()
PUBLIC: Refresh the attributes of the object(s) resulting from the query.
|
java.lang.Object |
registerIndividualResult(java.lang.Object result, java.lang.Object primaryKey, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, ClassDescriptor concreteDescriptor)
INTERNAL: Constructs the final (registered) object for every individual object queried via a UnitOfWork.
|
boolean |
requiresDeferredLocks()
INTERNAL: When reading across relationships, queries may be set to acquire deferred locks This is used to ensure any Eagerly fetched object that is the target of a relationship with an object the acquires deferred locks behaves the same as its owner
|
void |
setExecutionTime(long executionTime)
INTERNAL: Set the the time this query went to the database.
|
void |
setLockMode(short lockMode)
PUBLIC: Sets whether this is a pessimistically locking query.
|
void |
setPrefetchedCacheKeys(java.util.Map<java.lang.Object,org.eclipse.persistence.internal.identitymaps.CacheKey> prefetchedCacheKeys) |
void |
setReferenceClass(java.lang.Class aClass)
REQUIRED: Set the reference class for the query.
|
void |
setReferenceClassName(java.lang.String aClass)
INTERNAL: Set the reference class for the query.
|
void |
setRequiresDeferredLocks(boolean cascadeDeferredLocks)
INTERNAL: When reading across relationships, queries may be set to acquire deferred locks This is used to ensure any Eagerly fetched object that is the target of a relationship with an object the acquires deferred locks behaves the same as its owner
|
void |
setShouldBuildNullForNullPk(boolean shouldBuildNullForNullPk)
INTERNAL: If primary key is null ObjectBuilder.buildObject returns null in case this flag is set to true (instead of throwing exception).
|
void |
setShouldRefreshIdentityMapResult(boolean shouldRefreshIdentityMapResult)
PUBLIC: Set if the attributes of the object(s) resulting from the query should be refreshed.
|
void |
setShouldRefreshRemoteIdentityMapResult(boolean shouldRefreshIdentityMapResult)
PUBLIC: Set if the attributes of the object(s) resulting from the query should be refreshed.
|
void |
setShouldRegisterResultsInUnitOfWork(boolean shouldRegisterResultsInUnitOfWork)
INTERNAL: Set to false to have queries conform to a UnitOfWork without registering any additional objects not already in that UnitOfWork.
|
void |
setShouldUseExclusiveConnection(boolean shouldUseExclusiveConnection)
ADVANCED: If the user has isolated data and specified that the client session should use an exclusive connection then by setting this condition to true EclipseLink will ensure that the query is executed through the exclusive connection.
|
boolean |
shouldBuildNullForNullPk()
INTERNAL: If primary key is null ObjectBuilder.buildObject returns null in case this flag is set to true (instead of throwing exception).
|
boolean |
shouldReadAllMappings()
INTERNAL: Return if this is a full object query, not partial nor fetch group.
|
boolean |
shouldReadMapping(DatabaseMapping mapping, FetchGroup fetchGroup)
INTERNAL: Check if the mapping is part of the partial attributes.
|
boolean |
shouldRefreshIdentityMapResult()
PUBLIC: Set to a boolean.
|
boolean |
shouldRefreshRemoteIdentityMapResult()
PUBLIC: Set to a boolean.
|
boolean |
shouldRegisterResultsInUnitOfWork()
INTERNAL: Allows one to do conforming in a UnitOfWork without registering.
|
boolean |
shouldUseExclusiveConnection()
ADVANCED: If the user has isolated data and specified that the client session should use an exclusive connection then by setting this condition to true EclipseLink will ensure that the query is executed through the exclusive connection.
|
boolean |
shouldUseSerializedObjectPolicy()
INTERNAL: Indicates whether the query should use SerializedObjectPolicy if descriptor has it.
|
boolean |
usesResultSetAccessOptimization()
INTERNAL: Return if the query uses ResultSet optimization.
|
buildObject, cacheQueryResults, cacheResult, clearQueryResults, doNotCacheQueryResults, getFetchSize, getFirstResult, getInternalMax, getMaxRows, getQueryId, getQueryResultsCachePolicy, getTemporaryCachedQueryResults, isDefaultPropertiesQuery, isReadQuery, prepareForExecution, remoteExecute, setFetchSize, setFirstResult, setInternalMax, setMaxRows, setQueryId, setQueryResultsCachePolicy, setTemporaryCachedQueryResults, shouldCacheQueryResults
addArgument, addArgument, addArgument, addArgument, addArgument, addArgument, addArgumentByTypeName, addArgumentValue, addArgumentValues, addCall, addStatement, bindAllParameters, buildArgumentFields, cacheStatement, cascadeAllParts, cascadeByMapping, cascadeOnlyDependentParts, cascadePrivateParts, checkDescriptor, checkEarlyReturn, checkPrepare, checkPrepare, dontBindAllParameters, dontCacheStatement, dontCascadeParts, dontMaintainCache, execute, executeDatabaseQuery, executeInUnitOfWork, extractRemoteResult, getAccessor, getAccessors, getArgumentParameterTypes, getArguments, getArgumentTypeNames, getArgumentTypes, getArgumentValues, getBatchObjects, getCall, getCascadePolicy, getDatasourceCall, getDatasourceCalls, getDescriptor, getDescriptors, getDomainClassNounName, getDoNotRedirect, getEJBQLString, getExecutionSession, getFlushOnExecute, getHintString, getJPQLString, getMonitorName, getName, getNullableArguments, getParameterDelimiter, getParameterDelimiterChar, getPartitioningPolicy, getProperties, getProperty, getQueryMechanism, getQueryNounName, getQueryTimeout, getRedirector, getRedirectorForQuery, getSelectionCriteria, getSensorName, getSession, getSessionName, getShouldBindAllParameters, getSourceMapping, getSQLStatement, getSQLString, getSQLStrings, getTranslatedSQLString, getTranslatedSQLStrings, getTranslationRow, hasAccessor, hasArguments, hasNullableArguments, hasProperties, hasQueryMechanism, hasSessionName, ignoreBindAllParameters, ignoreCacheStatement, isCallQuery, isCascadeOfAggregateDelete, isCustomQueryUsed, isDataModifyQuery, isDataReadQuery, isDeleteAllQuery, isDeleteObjectQuery, isDirectReadQuery, isExecutionClone, isExpressionQuery, isInsertObjectQuery, isJPQLCallQuery, isModifyAllQuery, isModifyQuery, isNativeConnectionRequired, isObjectLevelModifyQuery, isObjectLevelReadQuery, isPrepared, isReadAllQuery, isReadObjectQuery, isReportQuery, isResultSetMappingQuery, isSQLCallQuery, isUpdateAllQuery, isUpdateObjectQuery, isUserDefined, isUserDefinedSQLCall, isValueReadQuery, isWriteObjectQuery, maintainCache, prepareCall, prepareInternal, redirectQuery, removeProperty, replaceValueHoldersIn, resetMonitorName, retrieveBypassCache, rowFromArguments, setAccessor, setAccessors, setAllowNativeSQLQuery, setArguments, setArgumentTypeNames, setArgumentTypes, setArgumentValues, setBatchObjects, setCall, setCascadePolicy, setDatasourceCall, setDescriptor, setDoNotRedirect, setEJBQLString, setFlushOnExecute, setHintString, setIsExecutionClone, setIsNativeConnectionRequired, setIsPrepared, setIsUserDefined, setIsUserDefinedSQLCall, setJPQLString, setName, setNullableArguments, setParameterDelimiter, setPartitioningPolicy, setProperties, setProperty, setQueryTimeout, setRedirector, setSelectionCriteria, setSession, setSessionName, setShouldBindAllParameters, setShouldBindAllParameters, setShouldCacheStatement, setShouldMaintainCache, setShouldPrepare, setShouldRetrieveBypassCache, setShouldStoreBypassCache, setShouldUseWrapperPolicy, setShouldValidateUpdateCallCacheUse, setSourceMapping, setSQLStatement, setSQLString, setTranslationRow, shouldAllowNativeSQLQuery, shouldBindAllParameters, shouldCacheStatement, shouldCascadeAllParts, shouldCascadeByMapping, shouldCascadeOnlyDependentParts, shouldCascadeParts, shouldCascadePrivateParts, shouldCloneCall, shouldIgnoreBindAllParameters, shouldIgnoreCacheStatement, shouldMaintainCache, shouldPrepare, shouldPrepare, shouldRetrieveBypassCache, shouldStoreBypassCache, shouldUseWrapperPolicy, shouldValidateUpdateCallCacheUse, storeBypassCache, toString
public static final short NO_LOCK
public static final short LOCK
public static final short LOCK_NOWAIT
public static final short DEFAULT_LOCK_MODE
public static final java.lang.String LOCK_RESULT_PROPERTY
public ObjectBuildingQuery()
public java.lang.Object clone()
clone
in class DatabaseQuery
public void convertClassNamesToClasses(java.lang.ClassLoader classLoader)
convertClassNamesToClasses
in class DatabaseQuery
classLoader
-public java.lang.Object deepClone()
Normally selection criteria are not cloned here as they are cloned later on during prepare.
public void copyFromQuery(DatabaseQuery query)
copyFromQuery
in class ReadQuery
public void prepareFromQuery(DatabaseQuery query)
prepareFromQuery
in class DatabaseQuery
public void dontRefreshIdentityMapResult()
public void dontRefreshRemoteIdentityMapResult()
public boolean hasExecutionFetchGroup()
public FetchGroup getExecutionFetchGroup()
public FetchGroup getExecutionFetchGroup(ClassDescriptor descriptor)
public LoadGroup getLoadGroup()
public short getLockMode()
public java.util.List getDataResults()
public long getExecutionTime()
public java.util.Map<java.lang.Object,org.eclipse.persistence.internal.identitymaps.CacheKey> getPrefetchedCacheKeys()
public java.lang.Class getReferenceClass()
getReferenceClass
in class DatabaseQuery
public java.lang.String getReferenceClassName()
getReferenceClassName
in class DatabaseQuery
public boolean hasPartialAttributeExpressions()
public boolean isLockQuery()
If a single joined attribute was configured for pessimistic locking then this will return true (after first execution) as the SQL contained a FOR UPDATE OF clause.
public boolean isObjectBuildingQuery()
isObjectBuildingQuery
in class DatabaseQuery
public boolean isRegisteringResults()
public void refreshIdentityMapResult()
public void refreshRemoteIdentityMapResult()
public java.lang.Object registerIndividualResult(java.lang.Object result, java.lang.Object primaryKey, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, ClassDescriptor concreteDescriptor)
Called for every object in a read all, the object in a read object, and every time the next or previous row is retrieved from a cursor.
The (conform) without registering feature is implemented here, and may return an original non UnitOfWork registered result.
Pessimistically locked objects are tracked here.
public void postRegisterIndividualResult(java.lang.Object clone, java.lang.Object original, java.lang.Object primaryKey, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl unitOfWork, org.eclipse.persistence.internal.queries.JoinedAttributeManager joinManager, ClassDescriptor concreteDescriptor)
public boolean requiresDeferredLocks()
public void setExecutionTime(long executionTime)
public void setLockMode(short lockMode)
Fine Grained Locking: On execution the reference class and those of all joined attributes will be checked. If any of these have a PessimisticLockingPolicy set on their descriptor, they will be locked in a SELECT ... FOR UPDATE OF ... {NO WAIT}. Issues fewer locks and avoids setting the lock mode on each query.
Example:readAllQuery.setSelectionCriteria(employee.get("address").equal("Ottawa"));
PessimisticLockingPolicy
public void setPrefetchedCacheKeys(java.util.Map<java.lang.Object,org.eclipse.persistence.internal.identitymaps.CacheKey> prefetchedCacheKeys)
public void setReferenceClass(java.lang.Class aClass)
public void setReferenceClassName(java.lang.String aClass)
public void setRequiresDeferredLocks(boolean cascadeDeferredLocks)
public void setShouldRefreshIdentityMapResult(boolean shouldRefreshIdentityMapResult)
public void setShouldRefreshRemoteIdentityMapResult(boolean shouldRefreshIdentityMapResult)
public void setShouldRegisterResultsInUnitOfWork(boolean shouldRegisterResultsInUnitOfWork)
shouldRegisterResultsInUnitOfWork
public void setShouldUseExclusiveConnection(boolean shouldUseExclusiveConnection)
public boolean shouldRegisterResultsInUnitOfWork()
Extreme care should be taken in using this feature, for a user will get back a mix of registered and original (unregistered) objects.
Best used with a WrapperPolicy where invoking on an object will trigger its registration (CMP). Without a WrapperPolicy registerExistingObject
should be called on any object that you intend to change.
setShouldRegisterResultsInUnitOfWork(boolean)
public boolean shouldUseExclusiveConnection()
public boolean shouldReadAllMappings()
public boolean shouldReadMapping(DatabaseMapping mapping, FetchGroup fetchGroup)
public boolean shouldRefreshIdentityMapResult()
public boolean shouldRefreshRemoteIdentityMapResult()
public boolean isAttributeJoined(ClassDescriptor mappingDescriptor, java.lang.String attributeName)
public boolean isCacheCheckComplete()
public boolean isClonePessimisticLocked(java.lang.Object clone, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
public void recordCloneForPessimisticLocking(java.lang.Object clone, org.eclipse.persistence.internal.sessions.UnitOfWorkImpl uow)
public boolean isDefaultLock()
public boolean shouldBuildNullForNullPk()
public void setShouldBuildNullForNullPk(boolean shouldBuildNullForNullPk)
public boolean usesResultSetAccessOptimization()
public boolean shouldUseSerializedObjectPolicy()