org.apache.cayenne.query

## Class IndirectQuery

- java.lang.Object
- - org.apache.cayenne.query.IndirectQuery

- All Implemented Interfaces:
    Serializable, Query
  Direct Known Subclasses:
    AbstractMappedQuery, ObjectIdQuery, ProcedureCall, RelationshipQuery, SelectById, SQLExec, SQLSelect

      public abstract class IndirectQuery
      extends Object
      implements Query

  A base superclass for queries that resolve into some other queries during the routing phase. Provides caching of a replacement query.
  Since:
    1.2
  See Also:
    Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected DataMap` | `dataMap`
    `protected EntityResolver` | `lastResolver`
    `protected String` | `name`
    `protected Query` | `replacementQuery`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `IndirectQuery()`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected abstract Query` | `createReplacementQuery(EntityResolver resolver)` Creates a substitute query.
    `SQLAction` | `createSQLAction(SQLActionVisitor visitor)` Throws an exception as indirect query should not be executed directly.
    `QueryMetadata` | `getMetaData(EntityResolver resolver)` Returns the metadata obtained from the replacement query.
    `protected Query` | `getReplacementQuery(EntityResolver resolver)` Returns a replacement query, creating it on demand and caching it for reuse.
    `void` | `route(QueryRouter router, EntityResolver resolver, Query substitutedQuery)` Delegates routing to a replacement query.

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

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

- - ### Field Detail

    - #### name

          protected String name

    - #### dataMap

          protected DataMap dataMap

      Since:
        3.1

    - #### replacementQuery

          protected transient Query replacementQuery

    - #### lastResolver

          protected transient EntityResolver lastResolver

  - ### Constructor Detail

    - #### IndirectQuery

          public IndirectQuery()

  - ### Method Detail

    - #### getMetaData

          public QueryMetadata getMetaData(EntityResolver resolver)

      Returns the metadata obtained from the replacement query.
      Specified by:
        `getMetaData` in interface `Query`

    - #### route

          public void route(QueryRouter router,
                            EntityResolver resolver,
                            Query substitutedQuery)

      Delegates routing to a replacement query.
      Specified by:
        `route` in interface `Query`

    - #### createReplacementQuery

          protected abstract Query createReplacementQuery(EntityResolver resolver)

      Creates a substitute query. An implementor is free to provide an arbitrary replacement query.

    - #### getReplacementQuery

          protected Query getReplacementQuery(EntityResolver resolver)

      Returns a replacement query, creating it on demand and caching it for reuse.

    - #### createSQLAction

          public SQLAction createSQLAction(SQLActionVisitor visitor)

      Throws an exception as indirect query should not be executed directly.
      Specified by:
        `createSQLAction` in interface `Query`

Copyright © 2001–2021 Apache Cayenne. All rights reserved.