# Class PrefetchSelectQuery<T>

java.lang.Object
org.apache.cayenne.query.CacheableQuery
org.apache.cayenne.query.AbstractQuery
org.apache.cayenne.query.FluentSelect<T, ObjectSelect<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`
See Also:
  - Serialized Form

- ## Field Summary

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

  ### Fields inherited from class FluentSelect

  `dbEntityName, distinct, entityName, entityType, having, havingExpressionIsActive, metaData, orderings, where`

  ### Fields inherited from class AbstractQuery

  `root`

  ### Fields inherited from class CacheableQuery

  `LOGGER`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `PrefetchSelectQuery(CayennePath 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.
  `void`
  `addResultPath(Expression 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.
  `CayennePath`
  `getPrefetchPath()`
  Returns the prefetchPath.
  `Collection<ASTPath>`
  `getResultPaths()`
  Returns extra result paths.
  `void`
  `removeResultPath(String path)`
  Removes an extra result path.
  `void`
  `removeResultPath(CayennePath 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`
  `setPrefetchPath(CayennePath prefetchPath)`
  Sets the prefetchPath.
  `void`
  `setPrefetchTree(PrefetchTreeNode prefetch)`
  Clean set of the prefetch tree without any merge with existing nodes.

  ### Methods inherited from class ObjectSelect

  `aggregate, avg, column, columnQuery, columnQuery, columns, count, count, createMetadata, createQuery, dataRowQuery, dataRowQuery, dbQuery, dbQuery, distinct, fetchDataRows, getBaseMetaData, getMetaData, having, having, max, max, min, min, query, query, query, query, selectCount, selectFirst, sum`

  ### Methods inherited from class FluentSelect

  `and, and, batchIterator, cacheGroup, cacheStrategy, cacheStrategy, castSelf, createSQLAction, dbEntityName, entityName, entityType, getActiveExpression, getColumns, getDbEntityName, getEntityName, getEntityType, getHaving, getLimit, getOffset, getOrderings, getPageSize, getPrefetches, getQueryTimeout, getStatementFetchSize, getWhere, initWithProperties, isDistinct, isFetchingDataRows, iterate, iterator, joinExpression, limit, localCache, localCache, offset, or, or, orderBy, orderBy, orderBy, orderBy, pageSize, prefetch, prefetch, queryTimeout, resolveRoot, route, select, selectOne, setActiveExpression, sharedCache, sharedCache, statementFetchSize, where, where`

  ### Methods inherited from class AbstractQuery

  `getRoot, setRoot, toString`

  ### Methods inherited from class CacheableQuery

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

  ### Methods inherited from class Object

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

  ### Methods inherited from interface Query

  `createSQLAction, route`

- ## Field Details

  - ### prefetchPath

    protected CayennePath 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<ASTPath> resultPaths

- ## Constructor Details

  - ### PrefetchSelectQuery

    public PrefetchSelectQuery(CayennePath 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, ObjectSelect<T>>`

  - ### getPrefetchPath

    public CayennePath getPrefetchPath()
    Returns the prefetchPath.
    Since:
      5.0 returns `CayennePath` instead of a plain `String`

  - ### setPrefetchPath

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

  - ### setPrefetchPath

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

  - ### 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

  - ### addResultPath

    public void addResultPath(Expression path)
    Configures an "extra" path that will resolve to an extra column (or columns) in the result set.
    Parameters:
      `path` - a path expression
    Since:
      5.0

  - ### 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.
    See Also:
      - `removeResultPath(CayennePath)`

  - ### removeResultPath

    public void removeResultPath(CayennePath 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.
    Since:
      5.0

  - ### getResultPaths

    public Collection<ASTPath> getResultPaths()
    Returns extra result paths.
    Since:
      1.2, 5.0 returns collection of `CayennePath`