docs: @Override
    public final ColumnsValues convert(final Map<String, Object> pAddParam,
      final T pObject) throws Exception {
      ColumnsValues result = new ColumnsValues();
      TableSql tableSql = this.tablesMap.get(this.objectClass.getSimpleName());
      result.setIdColumnsNames(tableSql.getIdColumnsNames());
      if (pAddParam.get("isOnlyId") != null) {
        if (tableSql.getIdColumnsNames().length > 0 && tableSql.getFieldsMap()
            .get(tableSql.getIdColumnsNames()[0]).getTypeField()
              .equals(ETypeField.DERIVED_FROM_COMPOSITE)) {
            // it's also composite foreign ID
          for (Map.Entry<String, FieldSql> entry : tableSql
            .getFieldsMap().entrySet()) {
            if (entry.getValue().getTypeField()
              .equals(ETypeField.COMPOSITE_FK_PK)) {
              convertField(pAddParam, entry.getKey(), pObject,
                true, result, tableSql);
              break;
            }
          }
        } else { // simple or foreign entity or composite ID (not also foreign):
          for (String idFldNm : tableSql.getIdColumnsNames()) {
            convertField(pAddParam, idFldNm, pObject, true, result, tableSql);
          }
        }
      } else if (pAddParam.get("fieldsNames") != null) {
        String[] fieldsNames = (String[]) pAddParam.get("fieldsNames");
        for (String fldNm : fieldsNames) {
          convertField(pAddParam, fldNm, pObject,
            false, result, tableSql);
        }
      } else {
        for (Map.Entry<String, FieldSql> entry : tableSql
          .getFieldsMap().entrySet()) {
          if (!entry.getValue().getTypeField()
            .equals(ETypeField.DERIVED_FROM_COMPOSITE)) {
            // Foreign entity with composite ID will be represented
            // as several ID fields, e.g. {itsName='admin', itsRole='role'}.
            convertField(pAddParam, entry.getKey(), pObject,
              false, result, tableSql);
          }
        }
      }
      return result;
    }