code: public Set<String> getAttributeNamesSkipGenerated(boolean managed) {
          //TODO: can cache this, but will need a cache for managed=true an another for managed=false
          Set<String> attributesNames = new CaseInsensitiveSet(getAttributeNamesSkipId());
  
          if(managed){
              attributesNames.remove("created_at");
              attributesNames.remove("updated_at");
          }
  
          attributesNames.remove(versionColumn);
          return attributesNames;
      }
docs: Finds all attribute names except managed like <code>id</code>,
  <code>created_at</code>, <code>updated_at</code> and <code>record_version</code>, depending on argument.
  
  @param managed if true, time managed attributes <code>created_at</code> and <code>updated_at</code> will not be included (they are managed automatically).
  If false (not managed) <code>created_at</code> and <code>updated_at</code> will be included in output.
  @return list of all attributes except <code>id</code>, <code>created_at</code>, <code>updated_at</code> and
  <code>record_version</code>, depending on argument.