public ClassDescriptor buildProjectDescriptor() {
    RelationalDescriptor descriptor = new RelationalDescriptor();
    descriptor.setJavaClass(Project.class);
    descriptor.addTableName("OTOJT_PROJECT");
    descriptor.addPrimaryKeyFieldName("OTOJT_PROJECT.PROJ_ID");

    // Inheritance Properties.
    descriptor.getInheritancePolicy().setClassIndicatorFieldName("OTOJT_PROJECT.PROJ_TYPE");
    descriptor.getInheritancePolicy().addClassIndicator(SmallProject.class, "S");
    descriptor.getInheritancePolicy().addClassIndicator(LargeProject.class, "L");

    // Descriptor Properties.
    descriptor.useSoftCacheWeakIdentityMap();
    descriptor.setIdentityMapSize(100);
    descriptor.setSequenceNumberFieldName("OTOJT_PROJECT.PROJ_ID");
    descriptor.setSequenceNumberName("OTOJT_PROJ_SEQ");
    VersionLockingPolicy lockingPolicy = new VersionLockingPolicy();
    lockingPolicy.setWriteLockFieldName("OTOJT_PROJECT.VERSION");
    descriptor.setOptimisticLockingPolicy(lockingPolicy);
    descriptor.setAlias("OTOJT_Project");

    // Cache Invalidation Policy
    // Query Manager.
    descriptor.getQueryManager().checkCacheForDoesExist();

    // Named Queries.
    // Event Manager.
    // Mappings.
    DirectToFieldMapping descriptionMapping = new DirectToFieldMapping();
    descriptionMapping.setAttributeName("description");
    descriptionMapping.setFieldName("OTOJT_PROJECT.DESCRIP");
    descriptionMapping.setNullValue("");
    descriptor.addMapping(descriptionMapping);

    DirectToFieldMapping idMapping = new DirectToFieldMapping();
    idMapping.setAttributeName("id");
    idMapping.setFieldName("OTOJT_PROJECT.PROJ_ID");
    descriptor.addMapping(idMapping);

    DirectToFieldMapping nameMapping = new DirectToFieldMapping();
    nameMapping.setAttributeName("name");
    nameMapping.setFieldName("OTOJT_PROJECT.PROJ_NAME");
    nameMapping.setNullValue("");
    descriptor.addMapping(nameMapping);

    OneToOneMapping teamLeaderMapping = new OneToOneMapping();
    teamLeaderMapping.setAttributeName("teamLeader");
    teamLeaderMapping.setReferenceClass(Employee.class);
    teamLeaderMapping.useBasicIndirection();
    //        teamLeaderMapping.addForeignKeyFieldName("OTOJT_PROJECT.LEADER_ID",
    // "OTOJT_EMPLOYEE.EMP_ID");
    teamLeaderMapping.setRelationTableMechanism(new RelationTableMechanism());
    teamLeaderMapping.getRelationTableMechanism().setRelationTableName("OTOJT_PROJ_LEADER");
    teamLeaderMapping
        .getRelationTableMechanism()
        .addSourceRelationKeyFieldName("OTOJT_PROJ_LEADER.PROJ_ID", "PROJ_ID");
    teamLeaderMapping
        .getRelationTableMechanism()
        .addTargetRelationKeyFieldName("OTOJT_PROJ_LEADER.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    descriptor.addMapping(teamLeaderMapping);

    ManyToManyMapping employeesMapping = new ManyToManyMapping();
    employeesMapping.setAttributeName("employees");
    employeesMapping.setReferenceClass(Employee.class);
    employeesMapping.readOnly();
    employeesMapping.useTransparentList();
    employeesMapping.setRelationTableName("OTOJT_PROJ_EMP");
    employeesMapping.addSourceRelationKeyFieldName("OTOJT_PROJ_EMP.PROJ_ID", "PROJ_ID");
    employeesMapping.addTargetRelationKeyFieldName(
        "OTOJT_PROJ_EMP.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    descriptor.addMapping(employeesMapping);

    return descriptor;
  }
  public ClassDescriptor buildEmployeeDescriptor() {
    RelationalDescriptor descriptor = new RelationalDescriptor();
    descriptor.setJavaClass(Employee.class);
    descriptor.addTableName("OTOJT_EMPLOYEE");
    descriptor.addTableName("OTOJT_SALARY");
    descriptor.addPrimaryKeyFieldName("OTOJT_EMPLOYEE.EMP_ID");

    // Descriptor Properties.
    descriptor.useSoftCacheWeakIdentityMap();
    descriptor.setIdentityMapSize(100);
    descriptor.setSequenceNumberFieldName("OTOJT_EMPLOYEE.EMP_ID");
    descriptor.setSequenceNumberName("OTOJT_EMP_SEQ");
    VersionLockingPolicy lockingPolicy = new VersionLockingPolicy();
    lockingPolicy.setWriteLockFieldName("OTOJT_EMPLOYEE.VERSION");
    descriptor.setOptimisticLockingPolicy(lockingPolicy);
    descriptor.setAlias("OTOJT_Employee");

    // Cache Invalidation Policy
    // Query Manager.
    descriptor.getQueryManager().checkCacheForDoesExist();

    // Named Queries.
    // Event Manager.
    // Mappings.
    DirectToFieldMapping firstNameMapping = new DirectToFieldMapping();
    firstNameMapping.setAttributeName("firstName");
    firstNameMapping.setFieldName("OTOJT_EMPLOYEE.F_NAME");
    firstNameMapping.setNullValue("");
    descriptor.addMapping(firstNameMapping);

    DirectToFieldMapping idMapping = new DirectToFieldMapping();
    idMapping.setAttributeName("id");
    idMapping.setFieldName("OTOJT_EMPLOYEE.EMP_ID");
    descriptor.addMapping(idMapping);

    DirectToFieldMapping lastNameMapping = new DirectToFieldMapping();
    lastNameMapping.setAttributeName("lastName");
    lastNameMapping.setFieldName("OTOJT_EMPLOYEE.L_NAME");
    lastNameMapping.setNullValue("");
    descriptor.addMapping(lastNameMapping);

    DirectToFieldMapping salaryMapping = new DirectToFieldMapping();
    salaryMapping.setAttributeName("salary");
    salaryMapping.setFieldName("OTOJT_SALARY.SALARY");
    descriptor.addMapping(salaryMapping);

    DirectToFieldMapping genderMapping = new DirectToFieldMapping();
    genderMapping.setAttributeName("gender");
    genderMapping.setFieldName("OTOJT_EMPLOYEE.GENDER");
    ObjectTypeConverter genderMappingConverter = new ObjectTypeConverter();
    genderMappingConverter.addConversionValue("F", "Female");
    genderMappingConverter.addConversionValue("M", "Male");
    genderMapping.setConverter(genderMappingConverter);
    descriptor.addMapping(genderMapping);

    DirectCollectionMapping responsibilitiesListMapping = new DirectCollectionMapping();
    responsibilitiesListMapping.setAttributeName("responsibilitiesList");
    responsibilitiesListMapping.useTransparentList();
    responsibilitiesListMapping.setReferenceTableName("OTOJT_RESPONS");
    responsibilitiesListMapping.setDirectFieldName("OTOJT_RESPONS.DESCRIP");
    responsibilitiesListMapping.addReferenceKeyFieldName(
        "OTOJT_RESPONS.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    descriptor.addMapping(responsibilitiesListMapping);

    OneToOneMapping addressMapping = new OneToOneMapping();
    addressMapping.setAttributeName("address");
    addressMapping.setReferenceClass(Address.class);
    addressMapping.useBasicIndirection();
    addressMapping.privateOwnedRelationship();
    //        addressMapping.addForeignKeyFieldName("OTOJT_EMPLOYEE.ADDR_ID",
    // "OTOJT_ADDRESS.ADDRESS_ID");
    addressMapping.setRelationTableMechanism(new RelationTableMechanism());
    addressMapping.getRelationTableMechanism().setRelationTableName("OTOJT_EMP_ADDRESS");
    addressMapping
        .getRelationTableMechanism()
        .addSourceRelationKeyFieldName("OTOJT_EMP_ADDRESS.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    addressMapping
        .getRelationTableMechanism()
        .addTargetRelationKeyFieldName("OTOJT_EMP_ADDRESS.ADDR_ID", "OTOJT_ADDRESS.ADDRESS_ID");
    descriptor.addMapping(addressMapping);

    // Joel:EJBQLTesting
    OneToOneMapping managerMapping = new OneToOneMapping();
    managerMapping.setAttributeName("manager");
    managerMapping.setReferenceClass(Employee.class);
    managerMapping.useBasicIndirection();
    //        managerMapping.addForeignKeyFieldName("OTOJT_EMPLOYEE.MANAGER_ID",
    // "OTOJT_EMPLOYEE.EMP_ID");
    managerMapping.setRelationTableMechanism(new RelationTableMechanism());
    managerMapping.getRelationTableMechanism().setRelationTableName("OTOJT_EMP_MANAGER");
    managerMapping
        .getRelationTableMechanism()
        .addSourceRelationKeyFieldName("OTOJT_EMP_MANAGER.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    managerMapping
        .getRelationTableMechanism()
        .addTargetRelationKeyFieldName("OTOJT_EMP_MANAGER.MANAGER_ID", "OTOJT_EMPLOYEE.EMP_ID");
    descriptor.addMapping(managerMapping);

    //        OneToManyMapping managedEmployeesMapping = new OneToManyMapping();
    ManyToManyMapping managedEmployeesMapping = new ManyToManyMapping();
    managedEmployeesMapping.setAttributeName("managedEmployees");
    managedEmployeesMapping.setReferenceClass(Employee.class);
    managedEmployeesMapping.useTransparentList();
    //        managedEmployeesMapping.addTargetForeignKeyFieldName("OTOJT_EMPLOYEE.MANAGER_ID",
    // "OTOJT_EMPLOYEE.EMP_ID");
    managedEmployeesMapping.setRelationTableName("OTOJT_EMP_MANAGER");
    managedEmployeesMapping.addSourceRelationKeyFieldName(
        "OTOJT_EMP_MANAGER.MANAGER_ID", "OTOJT_EMPLOYEE.EMP_ID");
    managedEmployeesMapping.addTargetRelationKeyFieldName(
        "OTOJT_EMP_MANAGER.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    managedEmployeesMapping.readOnly();
    descriptor.addMapping(managedEmployeesMapping);

    //        OneToManyMapping childrenMapping = new OneToManyMapping();
    ManyToManyMapping childrenMapping = new ManyToManyMapping();
    childrenMapping.setAttributeName("children");
    childrenMapping.setReferenceClass(Child.class);
    childrenMapping.addAscendingOrdering("birthday");
    childrenMapping.useTransparentList();
    childrenMapping.privateOwnedRelationship();
    //        childrenMapping.addTargetForeignKeyFieldName("OTOJT_CHILD.PARENT_EMP_ID",
    // "OTOJT_EMPLOYEE.EMP_ID");
    childrenMapping.setRelationTableName("OTOJT_CHILD_PARENT");
    childrenMapping.addSourceRelationKeyFieldName(
        "OTOJT_CHILD_PARENT.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    childrenMapping.addTargetRelationKeyFieldName(
        "OTOJT_CHILD_PARENT.CHILD_ID", "OTOJT_CHILD.CHILD_ID");
    descriptor.addMapping(childrenMapping);

    ManyToManyMapping projectsMapping = new ManyToManyMapping();
    projectsMapping.setAttributeName("projects");
    projectsMapping.setReferenceClass(Project.class);
    projectsMapping.useTransparentList();
    projectsMapping.setRelationTableName("OTOJT_PROJ_EMP");
    projectsMapping.addSourceRelationKeyFieldName("OTOJT_PROJ_EMP.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    projectsMapping.addTargetRelationKeyFieldName(
        "OTOJT_PROJ_EMP.PROJ_ID", "OTOJT_PROJECT.PROJ_ID");
    descriptor.addMapping(projectsMapping);

    OneToOneMapping projectLedMapping = new OneToOneMapping();
    projectLedMapping.setAttributeName("projectLed");
    projectLedMapping.setReferenceClass(Project.class);
    projectLedMapping.useBasicIndirection();
    projectLedMapping.setRelationTableMechanism(new RelationTableMechanism());
    projectLedMapping.getRelationTableMechanism().setRelationTableName("OTOJT_PROJ_LEADER");
    projectLedMapping
        .getRelationTableMechanism()
        .addSourceRelationKeyFieldName("OTOJT_PROJ_LEADER.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
    projectLedMapping
        .getRelationTableMechanism()
        .addTargetRelationKeyFieldName("OTOJT_PROJ_LEADER.PROJ_ID", "PROJ_ID");
    projectLedMapping.readOnly();
    descriptor.addMapping(projectLedMapping);

    return descriptor;
  }