Class IndirectQuery

java.lang.Object
org.apache.cayenne.query.IndirectQuery
All Implemented Interfaces:
Serializable, Query
Direct Known Subclasses:
AbstractMappedQuery, FluentSelect, 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 Details

    • name

      protected String name
    • dataMap

      protected DataMap dataMap
      Since:
      3.1
    • replacementQuery

      protected transient Query replacementQuery
    • lastResolver

      protected transient EntityResolver lastResolver
  • Constructor Details

    • IndirectQuery

      public IndirectQuery()
  • Method Details

    • 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