docs: public FieldDescriptor[] getPkFields()
      {
          if (m_PkFieldDescriptors == null)
          {
              // 1. collect all Primary Key fields from Field list
              Vector vec = new Vector();
              // 1.a if descriptor describes an interface: take PK fields from an implementors ClassDescriptor
              if (m_isInterface)
              {
                  if (getExtentClasses().size() == 0)
                  {
                      throw new PersistenceBrokerException(
                          "No Implementors declared for interface "
                              + this.getClassOfObject().getName());
                  }
                  Class implementor = (Class) getExtentClasses().get(0);
                  ClassDescriptor implCld = this.getRepository().getDescriptorFor(implementor);
                  m_PkFieldDescriptors = implCld.getPkFields();
              }
              else
              {
                  FieldDescriptor[] fields;
                  // 1.b if not an interface The classdescriptor must have FieldDescriptors
                  fields = getFieldDescriptions();
                  // now collect all PK fields
                  for (int i = 0; i < fields.length; i++)
                  {
                      FieldDescriptor fd = fields[i];
                      if (fd.isPrimaryKey())
                      {
                          vec.add(fd);
                      }
                  }
                  // 2. Sort fields according to their getOrder() Property
                  Collections.sort(vec, FieldDescriptor.getComparator());
                  m_PkFieldDescriptors = (FieldDescriptor[]) vec.toArray(new FieldDescriptor[vec.size()]);
              }
          }
          return m_PkFieldDescriptors;
      }