code: protected <T> CharSequence createSQLExpress(final EntityInfo<T> info, final Map<Class, String> joinTabalis) {
          CharSequence sb0 = this.column == null || this.column.isEmpty() || this.column.charAt(0) == '#' || info == null
              ? null : createElementSQLExpress(info, joinTabalis == null ? null : joinTabalis.get(info.getType()));
          if (this.nodes == null) return sb0;
          final StringBuilder rs = new StringBuilder();
          rs.append('(');
          boolean more = false;
          if (sb0 != null && sb0.length() > 2) {
              more = true;
              rs.append(sb0);
          }
          for (FilterNode node : this.nodes) {
              CharSequence f = node.createSQLExpress(info, joinTabalis);
              if (f == null || f.length() < 3) continue;
              if (more) rs.append(or ? " OR " : " AND ");
              rs.append(f);
              more = true;
          }
          rs.append(')');
          if (rs.length() < 5) return null;
          return rs;
      }
docs: 该方法需要重载
  
  @param <T>         Entity类的泛型
  @param joinTabalis 关联表的集合
  @param info        EntityInfo
  
  @return JOIN的SQL语句