/**
  * INTERNAL: Not to be confused with the public getField(String) This returns a collection of all
  * fields associated with this object. Really only applies to query keys representing an object or
  * to expression builders.
  */
 @Override
 public Vector getFields() {
   if (getDescriptor() == null) {
     DatabaseMapping mapping = getMapping();
     if (mapping != null) {
       return mapping.getSelectFields();
     }
     return new NonSynchronizedVector(0);
   }
   if (descriptor.hasInheritance()
           && descriptor.getInheritancePolicy().shouldReadSubclasses()
           && (!descriptor.getInheritancePolicy().hasMultipleTableChild())
       || shouldUseOuterJoinForMultitableInheritance()) {
     // return all fields because we can.
     return descriptor.getAllFields();
   } else {
     return descriptor.getFields();
   }
 }