Package org.apache.cayenne.query

# Class PrefetchSelectQuery<T>

java.lang.Object
org.apache.cayenne.query.CacheableQuery
org.apache.cayenne.query.AbstractQuery
org.apache.cayenne.query.FluentSelect<T>
org.apache.cayenne.query.ObjectSelect<T>
org.apache.cayenne.query.PrefetchSelectQuery<T>

All Implemented Interfaces:
  `Serializable`, `ParameterizedQuery`, `Query`, `Select<T>`

public class PrefetchSelectQuery<T> extends ObjectSelect<T>
A SelectQuery to perform a prefetch based on another query. Used internally by Cayenne and is normally never used directly.

Since:
  4.2 this query extends `ObjectSelect` as part of the deprecation of the `SelectQuery`
See Also:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected ObjRelationship`
  `lastPrefetchHint`
  Stores the last ObjRelationship in the prefetch path.
  `protected String`
  `prefetchPath`
  The relationship path from root objects to the objects being prefetched.
  `protected Collection<String>`
  `resultPaths`

  ### Fields inherited from class org.apache.cayenne.query.ObjectSelect

  `metaData`

  ### Fields inherited from class org.apache.cayenne.query.FluentSelect

  `dbEntityName, entityName, entityType, having, orderings, where`

  ### Fields inherited from class org.apache.cayenne.query.AbstractQuery

  `root`

  ### Fields inherited from class org.apache.cayenne.query.CacheableQuery

  `logger`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PrefetchSelectQuery(String prefetchPath, ObjRelationship lastPrefetchHint)`
  Creates a new disjoint prefetch select query.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addResultPath(String path)`
  Configures an "extra" path that will resolve to an extra column (or columns) in the result set.
  `ObjRelationship`
  `getLastPrefetchHint()`
  Returns last incoming ObjRelationship in the prefetch relationship chain.
  `String`
  `getPrefetchPath()`
  Returns the prefetchPath.
  `Collection<String>`
  `getResultPaths()`
  Returns extra result paths.
  `void`
  `removeResultPath(String path)`
  Removes an extra result path.
  `protected void`
  `routePrefetches(QueryRouter router, EntityResolver resolver)`
  `void`
  `setLastPrefetchHint(ObjRelationship relationship)`
  `void`
  `setPrefetchPath(String prefetchPath)`
  Sets the prefetchPath.
  `void`
  `setPrefetchTree(PrefetchTreeNode prefetch)`
  Clean set of the prefetch tree without any merge with existing nodes.

  ### Methods inherited from class org.apache.cayenne.query.ObjectSelect

  `and, and, avg, avg, cacheGroup, cacheStrategy, cacheStrategy, column, columnQuery, columnQuery, columns, count, count, createQuery, dataRowQuery, dataRowQuery, dbEntityName, dbQuery, dbQuery, distinct, entityName, entityType, fetchDataRows, getBaseMetaData, getMetaData, having, having, isFetchingDataRows, limit, localCache, localCache, max, max, min, min, offset, or, or, orderBy, orderBy, orderBy, orderBy, pageSize, prefetch, prefetch, query, query, query, query, queryTimeout, selectCount, selectFirst, sharedCache, sharedCache, statementFetchSize, sum, sum, where, where`

  ### Methods inherited from class org.apache.cayenne.query.FluentSelect

  `batchIterator, createSQLAction, getColumns, getDbEntityName, getEntityName, getEntityType, getHaving, getLimit, getOffset, getOrderings, getPageSize, getPrefetches, getQueryTimeout, getStatementFetchSize, getWhere, initWithProperties, isDistinct, iterate, iterator, resolveRoot, route, select, selectOne`

  ### Methods inherited from class org.apache.cayenne.query.AbstractQuery

  `getRoot, setRoot, toString`

  ### Methods inherited from class org.apache.cayenne.query.CacheableQuery

  `getCacheGroup, getCacheStrategy, setCacheGroup, setCacheStrategy, useLocalCache, useLocalCache, useSharedCache, useSharedCache`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface org.apache.cayenne.query.Query

  `createSQLAction, route`

- ## Field Details

  - ### prefetchPath

    protected String prefetchPath
    The relationship path from root objects to the objects being prefetched.

  - ### lastPrefetchHint

    protected ObjRelationship lastPrefetchHint
    Stores the last ObjRelationship in the prefetch path.

  - ### resultPaths

    protected Collection<String> resultPaths

- ## Constructor Details

  - ### PrefetchSelectQuery

    public PrefetchSelectQuery(String prefetchPath, ObjRelationship lastPrefetchHint)
    Creates a new disjoint prefetch select query.
    Since:
      3.1

- ## Method Details

  - ### routePrefetches

    protected void routePrefetches(QueryRouter router, EntityResolver resolver)
    Overrides:
      `routePrefetches` in class `FluentSelect<T>`

  - ### getPrefetchPath

    public String getPrefetchPath()
    Returns the prefetchPath.

  - ### setPrefetchPath

    public void setPrefetchPath(String prefetchPath)
    Sets the prefetchPath.
    Parameters:
      `prefetchPath` - The prefetchPath to set

  - ### setPrefetchTree

    public void setPrefetchTree(PrefetchTreeNode prefetch)
    Clean set of the prefetch tree without any merge with existing nodes.
    Parameters:
      `prefetch` - prefetch tree
    Since:
      4.2

  - ### getLastPrefetchHint

    public ObjRelationship getLastPrefetchHint()
    Returns last incoming ObjRelationship in the prefetch relationship chain.
    Since:
      1.1

  - ### setLastPrefetchHint

    public void setLastPrefetchHint(ObjRelationship relationship)
    Since:
      1.1

  - ### addResultPath

    public void addResultPath(String path)
    Configures an "extra" path that will resolve to an extra column (or columns) in the result set.
    Parameters:
      `path` - A valid path expression. E.g. "abc" or "db:ABC" or "abc.xyz".
    Since:
      1.2

  - ### removeResultPath

    public void removeResultPath(String path)
    Removes an extra result path. Note that this method doesn't check for expression invariants, as it doesn't have a proper context to do so. E.g. for the purpose of this method "db:ARTIST_NAME" and "obj:artistName" are not the same, though both will resolve to the same column name.

  - ### getResultPaths

    public Collection<String> getResultPaths()
    Returns extra result paths.
    Since:
      1.2