code: <T> Map<String, HColumn<String, byte[]>> createColumnMap(T obj) {
      if (null == obj) {
        throw new IllegalArgumentException("Class type cannot be null");
      }
  
      @SuppressWarnings("unchecked")
      CFMappingDef<T> cfMapDef = (CFMappingDef<T>) cacheMgr.getCfMapDef((Class<T>) obj.getClass(),
          true);
      try {
        Map<String, HColumn<String, byte[]>> colSet = new HashMap<String, HColumn<String, byte[]>>();
        Collection<PropertyMappingDefinition> coll = cfMapDef.getAllProperties();
        for (PropertyMappingDefinition md : coll) {
          Collection<HColumn<String, byte[]>> colColl = createColumnsFromProperty(obj, md);
          if (null != colColl) {
            for (HColumn<String, byte[]> col : colColl) {
              colSet.put(col.getName(), col);
            }
          }
        }
  
        if (null != cfMapDef.getCfBaseMapDef()) {
          CFMappingDef<?> cfSuperMapDef = cfMapDef.getCfBaseMapDef();
          String discColName = cfSuperMapDef.getDiscColumn();
          DiscriminatorType discType = cfSuperMapDef.getDiscType();
  
          colSet.put(
              discColName,
              createHColumn(discColName, convertDiscTypeToColValue(discType, cfMapDef.getDiscValue())));
        }
  
        addAnonymousProperties(obj, cfMapDef, colSet);
        return colSet;
      } catch (SecurityException e) {
        throw new RuntimeException(e);
      } catch (NoSuchFieldException e) {
        throw new RuntimeException(e);
      } catch (IllegalArgumentException e) {
        throw new RuntimeException(e);
      } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
      } catch (InvocationTargetException e) {
        throw new RuntimeException(e);
      }
    }
docs: Creates a Map of property names as key and HColumns as value. See #
  
  @param obj
  @return