public ClassDescriptor buildPhoneNumberDescriptor() {
    RelationalDescriptor descriptor = new RelationalDescriptor();
    descriptor.setJavaClass(PhoneNumber.class);
    descriptor.addTableName("PHONE");
    descriptor.addPrimaryKeyFieldName("PHONE.PHONE_ID");

    // Descriptor Properties.
    descriptor.useSoftCacheWeakIdentityMap();
    descriptor.setIdentityMapSize(100);
    descriptor.setSequenceNumberFieldName("PHONE.PHONE_ID");
    descriptor.setSequenceNumberName("PHONE_SEQ");
    descriptor.setAlias("PhoneNumber");

    // Query keys.
    descriptor.addDirectQueryKey("id", "PHONE.EMP_ID");

    // Mappings.
    DirectToFieldMapping idMapping = new DirectToFieldMapping();
    idMapping.setAttributeName("id");
    idMapping.setFieldName("PHONE.PHONE_ID");
    descriptor.addMapping(idMapping);

    DirectToFieldMapping areaCodeMapping = new DirectToFieldMapping();
    areaCodeMapping.setAttributeName("areaCode");
    areaCodeMapping.setFieldName("PHONE.AREA_CODE");
    descriptor.addMapping(areaCodeMapping);

    DirectToFieldMapping numberMapping = new DirectToFieldMapping();
    numberMapping.setAttributeName("number");
    numberMapping.setFieldName("PHONE.P_NUMBER");
    descriptor.addMapping(numberMapping);

    DirectToFieldMapping typeMapping = new DirectToFieldMapping();
    typeMapping.setAttributeName("type");
    typeMapping.setFieldName("PHONE.TYPE");
    descriptor.addMapping(typeMapping);

    OneToOneMapping ownerMapping = new OneToOneMapping();
    ownerMapping.setAttributeName("ownerHolder");
    ownerMapping.setReferenceClass(Employee.class);
    ownerMapping.useBasicIndirection();
    ownerMapping.addForeignKeyFieldName("PHONE.EMP_ID", "EMPLOYEE.EMP_ID");
    descriptor.addMapping(ownerMapping);

    return descriptor;
  }