/******************************************************************************* * Copyright (c) 1998, 2015 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 v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * 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; } }