/**
   * Método para setar o alias do from da consulta.
   *
   * @param fromAlias - alias do from
   */
  public void fromAlias(String fromAlias) {

    this.fromAlias = fromAlias;
    this.select.alias(fromAlias);

    ConditionBuilder.updateAliasForCondition(this.where, entityClass, fromAlias);

    if (this.orderBy != null) {
      this.orderBy.setFromAlias(fromAlias);
    }

    if (this.groupBy != null) {
      this.groupBy.setFromAlias(fromAlias);
    }

    for (Join j : joins) {
      if (j.getClazzFrom().equals(entityClass)) {
        j.fromAlias(fromAlias);
      }
    }
  }
  @Override
  public String buildSQL() {
    final StringBuilder sql = new StringBuilder();
    sql.append(SELECT.getSQLSelectType());
    sql.append(" ");

    if (distinct) {
      sql.append(DISTINCT.getSQLSelectType());
      sql.append(" ");
    }

    boolean readFieldsOfJoins = false;
    if (select.getFields().isEmpty()) {
      readFieldsOfJoins = true;

      Class<?> superTypeClass = entityClass.getSuperclass();
      if (!(Object.class.equals(superTypeClass))) {
        addJoin(JoinBuilder.newJoin(entityClass, fromAlias));
      }
    }

    sql.append(select.buildSQL());

    if (readFieldsOfJoins) {
      for (Join j : joins) {
        if (!(sql.toString().endsWith(" "))) {
          sql.append(", ");
        }

        Select selectJoin = j.builSelect();
        sql.append(selectJoin.buildSQL());
      }
    }

    sql.append(" ");
    sql.append(FROM.getSQLSelectType());
    sql.append(" ");
    sql.append(getTableName(entityClass));

    if (fromAlias != null && !(fromAlias.isEmpty())) {
      sql.append(" " + AS.getSQLSelectType() + " " + fromAlias);
    }

    if (!joins.isEmpty()) {
      for (Join j : joins) {
        sql.append(" ");
        sql.append(j.buildSQL());
      }
    }

    if (where != null) {
      sql.append(" ");
      sql.append(WHERE.getSQLSelectType());
      sql.append(" ");
      sql.append(where.buildSQL());
    }

    if (groupBy != null) {
      sql.append(" ");
      sql.append(groupBy.buildSQL());
    }

    if (orderBy != null) {
      sql.append(" ");
      sql.append(orderBy.buildSQL());
    }

    if (offset > DEFAULT_LIMIT_AND_OFFSET) {
      sql.append(" ");
      sql.append(OFFSET.getSQLSelectType());
      sql.append(" ");
      sql.append(offset);
    }

    if (limit > DEFAULT_LIMIT_AND_OFFSET) {
      sql.append(" ");
      sql.append(LIMIT.getSQLSelectType());
      sql.append(" ");
      sql.append(limit);
    }

    if (union != null) {
      sql.append(" ");
      sql.append(unionType.getUnionType());
      sql.append(" ");
      sql.append(union.buildSQL());
    }

    return sql.toString();
  }