/**
   * Process a particular association owned by the entity
   *
   * @param associationType The type representing the association to be processed.
   * @param persister The owner of the association to be processed.
   * @param propertyNumber The property number for the association (relative to the persister).
   * @param alias The entity alias
   * @param path The path to the association
   * @param nullable is the association nullable (which I think is supposed to indicate inner/outer
   *     join semantics).
   * @param currentDepth The current join depth
   * @throws org.hibernate.MappingException ???
   */
  private void walkEntityAssociationTree(
      final AssociationType associationType,
      final OuterJoinLoadable persister,
      final int propertyNumber,
      final String alias,
      final PropertyPath path,
      final boolean nullable,
      final int currentDepth)
      throws MappingException {
    String[] aliasedLhsColumns =
        JoinHelper.getAliasedLHSColumnNames(
            associationType, alias, propertyNumber, persister, getFactory());
    String[] lhsColumns =
        JoinHelper.getLHSColumnNames(associationType, propertyNumber, persister, getFactory());
    String lhsTable = JoinHelper.getLHSTableName(associationType, propertyNumber, persister);

    PropertyPath subPath = path.append(persister.getSubclassPropertyName(propertyNumber));
    JoinType joinType =
        getJoinType(
            persister,
            subPath,
            propertyNumber,
            associationType,
            persister.getFetchMode(propertyNumber),
            persister.getCascadeStyle(propertyNumber),
            lhsTable,
            lhsColumns,
            nullable,
            currentDepth);
    addAssociationToJoinTreeIfNecessary(
        associationType, aliasedLhsColumns, alias, subPath, currentDepth, joinType);
  }