blob: 7c069c135fda9fe5246ffca347686a3aa1cfb6e9 [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// 07/16/2009 Andrei Ilitchev
// - Bug 282553: JPA 2.0 JoinTable support for OneToOne and ManyToOne
package org.eclipse.persistence.testing.models.onetoonejointable;
import org.eclipse.persistence.sessions.*;
import org.eclipse.persistence.descriptors.*;
import org.eclipse.persistence.mappings.*;
import org.eclipse.persistence.mappings.converters.*;
public class EmployeeProject extends org.eclipse.persistence.sessions.Project {
public EmployeeProject() {
// OTOJT stands for OneToOneJoinTable
setName("OTOJT_Employee");
setDatasourceLogin(new DatabaseLogin());
addDescriptor(buildAddressDescriptor());
addDescriptor(buildChildDescriptor());
addDescriptor(buildEmployeeDescriptor());
addDescriptor(buildLargeProjectDescriptor());
addDescriptor(buildProjectDescriptor());
addDescriptor(buildSmallProjectDescriptor());
}
public ClassDescriptor buildAddressDescriptor() {
RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaClass(Address.class);
descriptor.addTableName("OTOJT_ADDRESS");
descriptor.addPrimaryKeyFieldName("OTOJT_ADDRESS.ADDRESS_ID");
// Descriptor Properties.
descriptor.useSoftCacheWeakIdentityMap();
descriptor.setIdentityMapSize(100);
descriptor.setSequenceNumberFieldName("OTOJT_ADDRESS.ADDRESS_ID");
descriptor.setSequenceNumberName("OTOJT_ADDRESS_SEQ");
descriptor.setAlias("OTOJT_Address");
// Cache Invalidation Policy
// Query Manager.
descriptor.getQueryManager().checkCacheForDoesExist();
// Named Queries.
// Event Manager.
// Mappings.
DirectToFieldMapping cityMapping = new DirectToFieldMapping();
cityMapping.setAttributeName("city");
cityMapping.setFieldName("OTOJT_ADDRESS.CITY");
descriptor.addMapping(cityMapping);
DirectToFieldMapping countryMapping = new DirectToFieldMapping();
countryMapping.setAttributeName("country");
countryMapping.setFieldName("OTOJT_ADDRESS.COUNTRY");
descriptor.addMapping(countryMapping);
DirectToFieldMapping idMapping = new DirectToFieldMapping();
idMapping.setAttributeName("id");
idMapping.setFieldName("OTOJT_ADDRESS.ADDRESS_ID");
descriptor.addMapping(idMapping);
DirectToFieldMapping postalCodeMapping = new DirectToFieldMapping();
postalCodeMapping.setAttributeName("postalCode");
postalCodeMapping.setFieldName("OTOJT_ADDRESS.P_CODE");
descriptor.addMapping(postalCodeMapping);
DirectToFieldMapping provinceMapping = new DirectToFieldMapping();
provinceMapping.setAttributeName("province");
provinceMapping.setFieldName("OTOJT_ADDRESS.PROVINCE");
descriptor.addMapping(provinceMapping);
DirectToFieldMapping streetMapping = new DirectToFieldMapping();
streetMapping.setAttributeName("street");
streetMapping.setFieldName("OTOJT_ADDRESS.STREET");
descriptor.addMapping(streetMapping);
return descriptor;
}
public ClassDescriptor buildChildDescriptor() {
RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaClass(Child.class);
descriptor.addTableName("OTOJT_CHILD");
descriptor.addPrimaryKeyFieldName("OTOJT_CHILD.CHILD_ID");
descriptor.useSoftCacheWeakIdentityMap();
descriptor.setIdentityMapSize(50);
descriptor.setSequenceNumberFieldName("OTOJT_CHILD.CHILD_ID");
descriptor.setSequenceNumberName("OTOJT_CHILD_SEQ");
descriptor.setAlias("OTOJT_Child");
// Query Manager.
descriptor.getQueryManager().checkCacheForDoesExist();
// Mappings.
DirectToFieldMapping firstNameMapping = new DirectToFieldMapping();
firstNameMapping.setAttributeName("firstName");
firstNameMapping.setFieldName("F_NAME");
firstNameMapping.setNullValue("");
descriptor.addMapping(firstNameMapping);
DirectToFieldMapping idMapping = new DirectToFieldMapping();
idMapping.setAttributeName("id");
idMapping.setFieldName("CHILD_ID");
descriptor.addMapping(idMapping);
DirectToFieldMapping lastNameMapping = new DirectToFieldMapping();
lastNameMapping.setAttributeName("lastName");
lastNameMapping.setFieldName("L_NAME");
lastNameMapping.setNullValue("");
descriptor.addMapping(lastNameMapping);
DirectToFieldMapping genderMapping = new DirectToFieldMapping();
genderMapping.setAttributeName("gender");
genderMapping.setFieldName("GENDER");
ObjectTypeConverter genderMappingConverter = new ObjectTypeConverter();
genderMappingConverter.addConversionValue("F", "Female");
genderMappingConverter.addConversionValue("M", "Male");
genderMapping.setConverter(genderMappingConverter);
descriptor.addMapping(genderMapping);
DirectToFieldMapping birthdayMapping = new DirectToFieldMapping();
birthdayMapping.setAttributeName("birthday");
birthdayMapping.setFieldName("BIRTHDAY");
descriptor.addMapping(birthdayMapping);
OneToOneMapping parentMapping = new OneToOneMapping();
parentMapping.setAttributeName("parent");
parentMapping.setReferenceClass(Employee.class);
parentMapping.dontUseIndirection();
parentMapping.setRelationTableMechanism(new RelationTableMechanism());
parentMapping.getRelationTableMechanism().setRelationTableName("OTOJT_CHILD_PARENT");
parentMapping.getRelationTableMechanism().addSourceRelationKeyFieldName("OTOJT_CHILD_PARENT.CHILD_ID", "OTOJT_CHILD.CHILD_ID");
parentMapping.getRelationTableMechanism().addTargetRelationKeyFieldName("OTOJT_CHILD_PARENT.EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
// parentMapping.addForeignKeyFieldName("OTOJT_CHILD.PARENT_EMP_ID", "OTOJT_EMPLOYEE.EMP_ID");
parentMapping.readOnly();
descriptor.addMapping(parentMapping);
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;
}
public ClassDescriptor buildLargeProjectDescriptor() {
RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaClass(LargeProject.class);
descriptor.addTableName("OTOJT_LPROJECT");
// Inheritance Properties.
descriptor.getInheritancePolicy().setParentClass(Project.class);
descriptor.getInheritancePolicy().dontReadSubclassesOnQueries();
// Descriptor Properties.
descriptor.setAlias("OTOJT_LargeProject");
// Cache Invalidation Policy
// Query Manager.
descriptor.getQueryManager().checkCacheForDoesExist();
// Named Queries.
// Event Manager.
// Mappings.
DirectToFieldMapping budgetMapping = new DirectToFieldMapping();
budgetMapping.setAttributeName("budget");
budgetMapping.setFieldName("OTOJT_LPROJECT.BUDGET");
descriptor.addMapping(budgetMapping);
DirectToFieldMapping milestoneVersionMapping = new DirectToFieldMapping();
milestoneVersionMapping.setAttributeName("milestoneVersion");
milestoneVersionMapping.setFieldName("OTOJT_LPROJECT.MILESTONE");
descriptor.addMapping(milestoneVersionMapping);
return descriptor;
}
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 buildSmallProjectDescriptor() {
RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaClass(SmallProject.class);
descriptor.addTableName("OTOJT_PROJECT");
// Inheritance Properties.
descriptor.getInheritancePolicy().setParentClass(Project.class);
descriptor.getInheritancePolicy().dontReadSubclassesOnQueries();
// Descriptor Properties.
descriptor.setAlias("OTOJT_SmallProject");
// Cache Invalidation Policy
// Query Manager.
descriptor.getQueryManager().checkCacheForDoesExist();
// Named Queries.
// Event Manager.
return descriptor;
}
}