# Class EJBQLJoinAppender

java.lang.Object
org.apache.cayenne.access.translator.ejbql.EJBQLJoinAppender

public class EJBQLJoinAppender extends Object
Handles appending joins to the content buffer at a marked position.

Since:
  3.0

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected EJBQLTranslationContext`
  `context`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `EJBQLJoinAppender(EJBQLTranslationContext context)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `appendInnerJoin(String marker, org.apache.cayenne.access.translator.ejbql.EJBQLTableId lhsId, org.apache.cayenne.access.translator.ejbql.EJBQLTableId rhsId)`
  `protected void`
  `appendJoin(String marker, org.apache.cayenne.access.translator.ejbql.EJBQLTableId lhsId, org.apache.cayenne.access.translator.ejbql.EJBQLTableId rhsId, String semantics)`
  `void`
  `appendOuterJoin(String marker, org.apache.cayenne.access.translator.ejbql.EJBQLTableId lhsId, org.apache.cayenne.access.translator.ejbql.EJBQLTableId rhsId)`
  `String`
  `appendTable(org.apache.cayenne.access.translator.ejbql.EJBQLTableId id)`
  `String`
  `registerReusableJoin(String sourceIdPath, String relationship, String targetId)`
  Registers a "reusable" join, returning a preexisting ID if the join is already registered.

  ### Methods inherited from class Object

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

- ## Field Details

  - ### context

    protected EJBQLTranslationContext context

- ## Constructor Details

  - ### EJBQLJoinAppender

    public EJBQLJoinAppender(EJBQLTranslationContext context)

- ## Method Details

  - ### registerReusableJoin

    public String registerReusableJoin(String sourceIdPath, String relationship, String targetId)
    Registers a "reusable" join, returning a preexisting ID if the join is already registered. Reusable joins are the implicit inner joins that are added as a result of processing of path expressions in SELECT or WHERE clauses. Note that if an implicit INNER join overlaps with an explicit INNER join, both joins are added to the query.

  - ### appendInnerJoin

    public void appendInnerJoin(String marker, org.apache.cayenne.access.translator.ejbql.EJBQLTableId lhsId, org.apache.cayenne.access.translator.ejbql.EJBQLTableId rhsId)

  - ### appendOuterJoin

    public void appendOuterJoin(String marker, org.apache.cayenne.access.translator.ejbql.EJBQLTableId lhsId, org.apache.cayenne.access.translator.ejbql.EJBQLTableId rhsId)

  - ### appendJoin

    protected void appendJoin(String marker, org.apache.cayenne.access.translator.ejbql.EJBQLTableId lhsId, org.apache.cayenne.access.translator.ejbql.EJBQLTableId rhsId, String semantics)

  - ### appendTable

    public String appendTable(org.apache.cayenne.access.translator.ejbql.EJBQLTableId id)