java.lang.Object
org.eclipse.persistence.jpa.jpql.tools.model.query.AbstractStateObject
org.eclipse.persistence.jpa.jpql.tools.model.query.JoinStateObject
All Implemented Interfaces:
StateObject

public class JoinStateObject extends AbstractStateObject
A JOIN enables the fetching of an association as a side effect of the execution of a query. A JOIN is specified over an entity and its related entities.

BNF: join ::= join_spec join_association_path_expression [AS] identification_variable

A JOIN FETCH enables the fetching of an association as a side effect of the execution of a query. A JOIN FETCH is specified over an entity and its related entities.

BNF: fetch_join ::= join_spec FETCH join_association_path_expression

Since:
2.4
Version:
2.4
See Also:
  • Field Details

    • AS_PROPERTY

      public static final String AS_PROPERTY
      Notifies the visibility of the AS identifier has changed.
      See Also:
    • JOIN_TYPE_PROPERTY

      public static final String JOIN_TYPE_PROPERTY
      Notifies the join type property has changed.
      See Also:
  • Constructor Details

  • Method Details

    • accept

      public void accept(StateObjectVisitor visitor)
      Description copied from interface: StateObject
      Visits this StateObject by the given visitor.
      Parameters:
      visitor - The visitor to visit this object
    • addAs

      public JoinStateObject addAs()
      Makes sure the AS identifier is specified.
      Returns:
      This object
    • addChildren

      protected void addChildren(List<StateObject> children)
      Description copied from class: AbstractStateObject
      Adds the children of this StateObject to the given list.
      Overrides:
      addChildren in class AbstractStateObject
      Parameters:
      children - The list used to store the children
    • addJoinAssociationPaths

      public void addJoinAssociationPaths(List<String> paths)
      Adds the given segments to the end of the join association path expression. The identification variable will not be affected.
      Parameters:
      paths - The new path expression
    • getExpression

      public Join getExpression()
      Description copied from interface: StateObject
      Returns the actual parsed object if this StateObject representation of the JPQL query was created by parsing an existing JPQL query.
      Specified by:
      getExpression in interface StateObject
      Overrides:
      getExpression in class AbstractStateObject
      Returns:
      The parsed object when a JPQL query is parsed and converted into a StateObject or null when the JPQL query is manually created (i.e. not from a string)
    • getIdentificationVariable

      public String getIdentificationVariable()
      Returns the name of the identification variable that defines the join association path.
      Returns:
      The variable defining the join association path
    • getIdentificationVariableStateObject

      public IdentificationVariableStateObject getIdentificationVariableStateObject()
      Returns the state object holding the identification variable.
      Returns:
      The portion of the joining expression representing the identification variable
    • getJoinAssociationIdentificationVariable

      public StateObject getJoinAssociationIdentificationVariable()
      Returns the StateObject representing the identification variable that starts the path expression, which can be a sample identification variable, a map value, map key or map entry expression.
      Returns:
      The root of the path expression
    • getJoinAssociationPathStateObject

      public CollectionValuedPathExpressionStateObject getJoinAssociationPathStateObject()
      Returns the CollectionValuedPathExpressionStateObject representing the join association path.
      Returns:
      The state object representing the join association path
    • getJoinType

      public String getJoinType()
      Returns the joining type.
      Returns:
      The joining type of this joining expression
    • getParent

      Description copied from interface: StateObject
      Returns the parent of this StateObject.
      Specified by:
      getParent in interface StateObject
      Overrides:
      getParent in class AbstractStateObject
      Returns:
      Returns the parent of this StateObject, which is null only when this is the root of the hierarchy
    • hasAs

      public boolean hasAs()
      Determines whether the AS identifier is used or not.
      Returns:
      true if the AS identifier is part of the expression; false otherwise
    • hasFetch

      public boolean hasFetch()
      Determines whether the identifier FETCH was parsed.
      Returns:
      true if the identifier FETCH was parsed; false otherwise
    • hasIdentificationVariable

      public boolean hasIdentificationVariable()
      Determines whether the identification variable has been defined.
      Returns:
      true if the identification has been defined; false otherwise
    • initialize

      protected void initialize()
      Description copied from class: AbstractStateObject
      Initializes this state object.
      Overrides:
      initialize in class AbstractStateObject
    • isEquivalent

      public boolean isEquivalent(StateObject stateObject)
      Description copied from interface: StateObject
      Determines whether the given StateObject is equivalent to this one, i.e. the information of both StateObject is the same.
      Specified by:
      isEquivalent in interface StateObject
      Overrides:
      isEquivalent in class AbstractStateObject
      Parameters:
      stateObject - The StateObject to compare its content to this one
      Returns:
      true if both object are equivalent; false otherwise
    • joinAssociationPaths

      public ListIterable<String> joinAssociationPaths()
      Returns the segments in the state field path in order.
      Returns:
      An Iterator over the segments of the state field path
    • joinAssociationPathSize

      public int joinAssociationPathSize()
      Returns the number of segments in the path expression.
      Returns:
      The number of segments
    • removeNot

      public void removeNot()
      Makes sure the AS identifier is not specified.
    • setAs

      public void setAs(boolean as)
      Sets whether the AS identifier is used or not.
      Parameters:
      as - true if the AS identifier is part of the expression; false otherwise
    • setExpression

      public void setExpression(Join expression)
      Keeps a reference of the parsed object object, which should only be done when this object is instantiated during the conversion of a parsed JPQL query into StateObjects.
      Parameters:
      expression - The parsed object representing a JOIN expression
    • setIdentificationVariable

      public void setIdentificationVariable(String identificationVariable)
      Sets the name of the identification variable that defines the join association path.
      Parameters:
      identificationVariable - The new variable defining the join association path
    • setJoinAssociationIdentificationVariable

      public void setJoinAssociationIdentificationVariable(StateObject identificationVariable)
      Sets the StateObject representing the identification variable that starts the path expression, which can be a sample identification variable, a map value, map key or map entry expression.
      Parameters:
      identificationVariable - The root of the path expression
    • setJoinAssociationPath

      public void setJoinAssociationPath(String path)
      Changes the path expression with the list of segments, the identification variable will also be updated with the first segment.
      Parameters:
      path - The new path expression
    • setJoinAssociationPaths

      public void setJoinAssociationPaths(ListIterator<String> paths)
      Changes the path expression with the list of segments, the identification variable will also be updated with the first segment.
      Parameters:
      paths - The new path expression
    • setJoinAssociationPaths

      public void setJoinAssociationPaths(String[] paths)
      Changes the path expression with the list of segments, the identification variable will also be updated with the first segment.
      Parameters:
      paths - The new path expression
    • setJoinType

      public void setJoinType(String joinType)
      Sets the joining type.
      Parameters:
      joinType - One of the joining types
    • toggleAs

      public void toggleAs()
      Toggles the usage of the AS identifier.
    • toTextInternal

      protected void toTextInternal(Appendable writer) throws IOException
      Description copied from class: AbstractStateObject
      Prints out a string representation of this StateObject, which should not be used to define a true string representation of a JPQL query but should be used for debugging purposes.
      Specified by:
      toTextInternal in class AbstractStateObject
      Parameters:
      writer - The writer used to print out the string representation
      Throws:
      IOException - This should never happens, it is only required because Appendable is used instead of any concrete class
    • validateJoinType

      protected void validateJoinType(String joinType)
      Validates the given join type.
      Parameters:
      joinType - One of the possible joining types