| /* |
| * 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: |
| // 05/1/2009-2.0 Guy Pelletier/David Minsky |
| // - 249033: JPA 2.0 Orphan removal |
| // 08/12/2015-2.6 Mythily Parthasarathy |
| // - 474752: Add TireDetail table creation |
| package org.eclipse.persistence.testing.models.jpa.orphanremoval; |
| |
| import org.eclipse.persistence.sessions.DatabaseSession; |
| import org.eclipse.persistence.tools.schemaframework.*; |
| |
| public class OrphanRemovalModelTableCreator extends TableCreator { |
| |
| public OrphanRemovalModelTableCreator() { |
| setName("JPAOrphanRemovalModelTableCreator"); |
| addTableDefinition(buildVEHICLETable()); |
| addTableDefinition(buildCHASSISTable()); |
| addTableDefinition(buildENGINETable()); |
| addTableDefinition(buildSPARKPLUGTable()); |
| addTableDefinition(buildWHEELTable()); |
| addTableDefinition(buildWHEELRIMTable()); |
| addTableDefinition(buildWHEELNUTTable()); |
| addTableDefinition(buildTIREDETAILTable()); |
| } |
| |
| public static TableDefinition buildCHASSISTable() { |
| // CREATE TABLE JPA_OR_CHASSIS (ID NUMBER(10) NOT NULL, SERIALNUMBER NUMBER(19) NULL, PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("JPA_OR_CHASSIS"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| FieldDefinition serialNumber = new FieldDefinition(); |
| serialNumber.setName("SERIALNUMBER"); |
| serialNumber.setTypeName("NUMERIC"); |
| serialNumber.setSize(18); |
| serialNumber.setSubSize(0); |
| serialNumber.setIsPrimaryKey(false); |
| serialNumber.setIsIdentity(false); |
| serialNumber.setShouldAllowNull(true); |
| serialNumber.setUnique(false); |
| table.addField(serialNumber); |
| |
| return table; |
| } |
| |
| public static TableDefinition buildVEHICLETable() { |
| // CREATE TABLE JPA_OR_VEHICLE (ID NUMBER(10) NOT NULL, MODEL VARCHAR2(255) NULL, CHASSIS_ID NUMBER(10) NULL, ENGINE_ID NUMBER(10) NULL, PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("JPA_OR_VEHICLE"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| FieldDefinition fieldMODEL = new FieldDefinition(); |
| fieldMODEL.setName("MODEL"); |
| fieldMODEL.setTypeName("VARCHAR"); |
| fieldMODEL.setSize(60); |
| fieldMODEL.setSubSize(0); |
| fieldMODEL.setIsPrimaryKey(false); |
| fieldMODEL.setIsIdentity(false); |
| fieldMODEL.setShouldAllowNull(true); |
| fieldMODEL.setUnique(false); |
| table.addField(fieldMODEL); |
| |
| FieldDefinition fieldCHASSIS = new FieldDefinition(); |
| fieldCHASSIS.setName("CHASSIS_ID"); |
| fieldCHASSIS.setTypeName("NUMERIC"); |
| fieldCHASSIS.setSize(10); |
| fieldCHASSIS.setSubSize(0); |
| fieldCHASSIS.setIsPrimaryKey(false); |
| fieldCHASSIS.setIsIdentity(false); |
| fieldCHASSIS.setShouldAllowNull(true); |
| fieldCHASSIS.setUnique(false); |
| table.addField(fieldCHASSIS); |
| |
| FieldDefinition fieldENGINE = new FieldDefinition(); |
| fieldENGINE.setName("ENGINE_ID"); |
| fieldENGINE.setTypeName("NUMERIC"); |
| fieldENGINE.setSize(10); |
| fieldENGINE.setSubSize(0); |
| fieldENGINE.setIsPrimaryKey(false); |
| fieldENGINE.setIsIdentity(false); |
| fieldENGINE.setShouldAllowNull(true); |
| fieldENGINE.setUnique(false); |
| table.addField(fieldENGINE); |
| |
| // ALTER TABLE JPA_OR_VEHICLE ADD CONSTRAINT FK_JPA_OR_VEHICLE_ENGINE_ID FOREIGN KEY (ENGINE_ID) REFERENCES JPA_OR_ENGINE (ID) |
| ForeignKeyConstraint foreignKeyVEHICLE_ENGINE = new ForeignKeyConstraint(); |
| foreignKeyVEHICLE_ENGINE.setName("FK_OR_VEH_ENG_ID"); |
| foreignKeyVEHICLE_ENGINE.setTargetTable("JPA_OR_ENGINE"); |
| foreignKeyVEHICLE_ENGINE.addSourceField("ENGINE_ID"); |
| foreignKeyVEHICLE_ENGINE.addTargetField("ID"); |
| table.addForeignKeyConstraint(foreignKeyVEHICLE_ENGINE); |
| |
| // ALTER TABLE JPA_OR_VEHICLE ADD CONSTRAINT FK_JPA_OR_VEHICLE_CHASSIS_ID FOREIGN KEY (CHASSIS_ID) REFERENCES JPA_OR_CHASSIS (ID) |
| ForeignKeyConstraint foreignKeyVEHICLE_CHASSIS = new ForeignKeyConstraint(); |
| foreignKeyVEHICLE_CHASSIS.setName("FK_OR_VEH_CHAS_ID"); |
| foreignKeyVEHICLE_CHASSIS.setTargetTable("JPA_OR_CHASSIS"); |
| foreignKeyVEHICLE_CHASSIS.addSourceField("CHASSIS_ID"); |
| foreignKeyVEHICLE_CHASSIS.addTargetField("ID"); |
| table.addForeignKeyConstraint(foreignKeyVEHICLE_CHASSIS); |
| |
| return table; |
| } |
| |
| public static TableDefinition buildENGINETable() { |
| // CREATE TABLE JPA_OR_ENGINE (ID NUMBER(10) NOT NULL, SERIALNUMBER NUMBER(19) NULL, PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("JPA_OR_ENGINE"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| FieldDefinition fieldSERIALNUMBER = new FieldDefinition(); |
| fieldSERIALNUMBER.setName("SERIALNUMBER"); |
| fieldSERIALNUMBER.setTypeName("NUMERIC"); |
| fieldSERIALNUMBER.setSize(18); |
| fieldSERIALNUMBER.setSubSize(0); |
| fieldSERIALNUMBER.setIsPrimaryKey(false); |
| fieldSERIALNUMBER.setIsIdentity(false); |
| fieldSERIALNUMBER.setShouldAllowNull(true); |
| fieldSERIALNUMBER.setUnique(false); |
| table.addField(fieldSERIALNUMBER); |
| |
| return table; |
| } |
| |
| public static TableDefinition buildSPARKPLUGTable() { |
| // CREATE TABLE JPA_OR_SPARK_PLUG (ID NUMBER(10) NOT NULL, SERIALNUMBER NUMBER(19) NULL, ENGINE_ID NUMBER(10) NULL, PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("JPA_OR_SPARK_PLUG"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| FieldDefinition fieldSERIALNUMBER = new FieldDefinition(); |
| fieldSERIALNUMBER.setName("SERIALNUMBER"); |
| fieldSERIALNUMBER.setTypeName("NUMERIC"); |
| fieldSERIALNUMBER.setSize(18); |
| fieldSERIALNUMBER.setSubSize(0); |
| fieldSERIALNUMBER.setIsPrimaryKey(false); |
| fieldSERIALNUMBER.setIsIdentity(false); |
| fieldSERIALNUMBER.setShouldAllowNull(true); |
| fieldSERIALNUMBER.setUnique(false); |
| table.addField(fieldSERIALNUMBER); |
| |
| FieldDefinition fieldENGINE = new FieldDefinition(); |
| fieldENGINE.setName("ENGINE_ID"); |
| fieldENGINE.setTypeName("NUMERIC"); |
| fieldENGINE.setSize(10); |
| fieldENGINE.setSubSize(0); |
| fieldENGINE.setIsPrimaryKey(false); |
| fieldENGINE.setIsIdentity(false); |
| fieldENGINE.setShouldAllowNull(true); |
| fieldENGINE.setUnique(false); |
| table.addField(fieldENGINE); |
| |
| // ALTER TABLE JPA_OR_SPARK_PLUG ADD CONSTRAINT JPA_OR_SPARK_PLUG_ENGINE_ID FOREIGN KEY (ENGINE_ID) REFERENCES JPA_OR_ENGINE (ID) |
| ForeignKeyConstraint foreignKeySPARKPLUG_ENGINE = new ForeignKeyConstraint(); |
| foreignKeySPARKPLUG_ENGINE.setName("FK_SPK_PG_ENG_ID"); |
| foreignKeySPARKPLUG_ENGINE.setTargetTable("JPA_OR_ENGINE"); |
| foreignKeySPARKPLUG_ENGINE.addSourceField("ENGINE_ID"); |
| foreignKeySPARKPLUG_ENGINE.addTargetField("ID"); |
| table.addForeignKeyConstraint(foreignKeySPARKPLUG_ENGINE); |
| |
| return table; |
| } |
| |
| public static TableDefinition buildWHEELTable() { |
| // CREATE TABLE JPA_OR_WHEEL (ID NUMBER(10) NOT NULL, SERIALNUMBER NUMBER(19) NULL, WHEELRIM_ID NUMBER(10) NULL, |
| // CHASSIS_ID NUMBER(10) NULL, MANUFACTURER VARCHAR2(255) NULL, TYPE VARCHAR2(255) NULL, PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("JPA_OR_WHEEL"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| FieldDefinition fieldSERIALNUMBER = new FieldDefinition(); |
| fieldSERIALNUMBER.setName("SERIALNUMBER"); |
| fieldSERIALNUMBER.setTypeName("NUMERIC"); |
| fieldSERIALNUMBER.setSize(18); |
| fieldSERIALNUMBER.setSubSize(0); |
| fieldSERIALNUMBER.setIsPrimaryKey(false); |
| fieldSERIALNUMBER.setIsIdentity(false); |
| fieldSERIALNUMBER.setShouldAllowNull(true); |
| fieldSERIALNUMBER.setUnique(false); |
| table.addField(fieldSERIALNUMBER); |
| |
| FieldDefinition fieldWHEELRIM = new FieldDefinition(); |
| fieldWHEELRIM.setName("WHEELRIM_ID"); |
| fieldWHEELRIM.setTypeName("NUMERIC"); |
| fieldWHEELRIM.setSize(10); |
| fieldWHEELRIM.setSubSize(0); |
| fieldWHEELRIM.setIsPrimaryKey(false); |
| fieldWHEELRIM.setIsIdentity(false); |
| fieldWHEELRIM.setShouldAllowNull(true); |
| fieldWHEELRIM.setUnique(false); |
| table.addField(fieldWHEELRIM); |
| |
| FieldDefinition fieldCHASSIS = new FieldDefinition(); |
| fieldCHASSIS.setName("CHASSIS_ID"); |
| fieldCHASSIS.setTypeName("NUMERIC"); |
| fieldCHASSIS.setSize(10); |
| fieldCHASSIS.setSubSize(0); |
| fieldCHASSIS.setIsPrimaryKey(false); |
| fieldCHASSIS.setIsIdentity(false); |
| fieldCHASSIS.setShouldAllowNull(true); |
| fieldCHASSIS.setUnique(false); |
| table.addField(fieldCHASSIS); |
| |
| FieldDefinition fieldMANUFACTURER = new FieldDefinition(); |
| fieldMANUFACTURER.setName("MANUFACTURER"); |
| fieldMANUFACTURER.setTypeName("VARCHAR"); |
| fieldMANUFACTURER.setSize(60); |
| fieldMANUFACTURER.setSubSize(0); |
| fieldMANUFACTURER.setIsPrimaryKey(false); |
| fieldMANUFACTURER.setIsIdentity(false); |
| fieldMANUFACTURER.setShouldAllowNull(true); |
| fieldMANUFACTURER.setUnique(false); |
| table.addField(fieldMANUFACTURER); |
| |
| FieldDefinition fieldTYPE = new FieldDefinition(); |
| fieldTYPE.setName("TYPE"); |
| fieldTYPE.setTypeName("VARCHAR"); |
| fieldTYPE.setSize(60); |
| fieldTYPE.setSubSize(0); |
| fieldTYPE.setIsPrimaryKey(false); |
| fieldTYPE.setIsIdentity(false); |
| fieldTYPE.setShouldAllowNull(true); |
| fieldTYPE.setUnique(false); |
| table.addField(fieldTYPE); |
| |
| // ALTER TABLE JPA_OR_WHEEL ADD CONSTRAINT FK_JPA_OR_WHEEL_WHEELRIM_ID FOREIGN KEY (WHEELRIM_ID) REFERENCES JPA_OR_WHEEL_RIM (ID) |
| ForeignKeyConstraint foreignKeyWHEEL_WHEELRIM = new ForeignKeyConstraint(); |
| foreignKeyWHEEL_WHEELRIM.setName("FK_WHL_WHLRM_ID"); |
| foreignKeyWHEEL_WHEELRIM.setTargetTable("JPA_OR_WHEEL_RIM"); |
| foreignKeyWHEEL_WHEELRIM.addSourceField("WHEELRIM_ID"); |
| foreignKeyWHEEL_WHEELRIM.addTargetField("ID"); |
| table.addForeignKeyConstraint(foreignKeyWHEEL_WHEELRIM); |
| |
| // ALTER TABLE JPA_OR_WHEEL ADD CONSTRAINT FK_JPA_OR_WHEEL_CHASSIS_ID FOREIGN KEY (CHASSIS_ID) REFERENCES JPA_OR_CHASSIS (ID) |
| ForeignKeyConstraint foreignKeyWHEEL_CHASSIS = new ForeignKeyConstraint(); |
| foreignKeyWHEEL_CHASSIS.setName("FK_WHL_CHAS_ID"); |
| foreignKeyWHEEL_CHASSIS.setTargetTable("JPA_OR_CHASSIS"); |
| foreignKeyWHEEL_CHASSIS.addSourceField("CHASSIS_ID"); |
| foreignKeyWHEEL_CHASSIS.addTargetField("ID"); |
| table.addForeignKeyConstraint(foreignKeyWHEEL_CHASSIS); |
| |
| return table; |
| } |
| |
| public static TableDefinition buildWHEELRIMTable() { |
| // CREATE TABLE JPA_OR_WHEEL_RIM (ID NUMBER(10) NOT NULL, PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("JPA_OR_WHEEL_RIM"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| return table; |
| } |
| |
| public static TableDefinition buildTIREDETAILTable() { |
| // 474752 :CREATE TABLE TIREDETAIL (ID NUMBER(10) NOT NULL, DETAIL VARCHAR2(255), PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("OR_TIREDETAIL"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("TIRE_ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| FieldDefinition fieldDetail = new FieldDefinition(); |
| fieldDetail.setName("DETAIL"); |
| fieldDetail.setTypeName("VARCHAR"); |
| fieldDetail.setSize(255); |
| fieldDetail.setSubSize(0); |
| fieldDetail.setIsPrimaryKey(false); |
| fieldDetail.setIsIdentity(false); |
| fieldDetail.setShouldAllowNull(true); |
| fieldDetail.setUnique(false); |
| table.addField(fieldDetail); |
| |
| return table; |
| } |
| |
| public static TableDefinition buildWHEELNUTTable() { |
| // CREATE TABLE JPA_OR_WHEEL_NUT (ID NUMBER(10) NOT NULL, WHEEL_ID NUMBER(10) NULL, PRIMARY KEY (ID)) |
| TableDefinition table = new TableDefinition(); |
| table.setName("JPA_OR_WHEEL_NUT"); |
| |
| FieldDefinition fieldID = new FieldDefinition(); |
| fieldID.setName("ID"); |
| fieldID.setTypeName("NUMERIC"); |
| fieldID.setSize(10); |
| fieldID.setSubSize(0); |
| fieldID.setIsPrimaryKey(true); |
| fieldID.setIsIdentity(true); |
| fieldID.setShouldAllowNull(false); |
| fieldID.setUnique(false); |
| table.addField(fieldID); |
| |
| FieldDefinition fieldWHEEL = new FieldDefinition(); |
| fieldWHEEL.setName("WHEEL_ID"); |
| fieldWHEEL.setTypeName("NUMERIC"); |
| fieldWHEEL.setSize(10); |
| fieldWHEEL.setSubSize(0); |
| fieldWHEEL.setIsPrimaryKey(false); |
| fieldWHEEL.setIsIdentity(false); |
| fieldWHEEL.setShouldAllowNull(true); |
| fieldWHEEL.setUnique(false); |
| table.addField(fieldWHEEL); |
| |
| // ALTER TABLE JPA_OR_WHEEL_NUT ADD CONSTRAINT FK_JPA_OR_WHEEL_NUT_WHEEL_ID FOREIGN KEY (WHEEL_ID) REFERENCES JPA_OR_WHEEL (ID) |
| ForeignKeyConstraint foreignKeyWHEELNUT_WHEEL = new ForeignKeyConstraint(); |
| foreignKeyWHEELNUT_WHEEL.setName("FK_WH_NUT_WL_ID"); |
| foreignKeyWHEELNUT_WHEEL.setTargetTable("JPA_OR_WHEEL"); |
| foreignKeyWHEELNUT_WHEEL.addSourceField("WHEEL_ID"); |
| foreignKeyWHEELNUT_WHEEL.addTargetField("ID"); |
| table.addForeignKeyConstraint(foreignKeyWHEELNUT_WHEEL); |
| |
| return table; |
| } |
| |
| /** |
| * Dropping old foreign keys from schema change. |
| */ |
| @Override |
| public void replaceTables(DatabaseSession session) { |
| if (session.getPlatform().supportsUniqueKeyConstraints() |
| && !session.getPlatform().requiresUniqueConstraintCreationOnTableCreate()) { |
| try { |
| if (!session.getPlatform().isMySQL()) { |
| session.executeNonSelectingSQL("Alter table JPA_OR_SPARK_PLUG drop constraint JPA_OR_SPARK_PLUG_ENGINE_ID"); |
| session.executeNonSelectingSQL("Alter table JPA_OR_VEHICLE drop constraint FK_JPA_OR_VEHICLE_ENGINE_ID"); |
| session.executeNonSelectingSQL("Alter table JPA_OR_VEHICLE drop constraint FK_JPA_OR_VEHICLE_CHASSIS_ID"); |
| session.executeNonSelectingSQL("Alter table JPA_OR_WHEEL drop constraint FK_JPA_OR_WHEEL_WHEELRIM_ID"); |
| session.executeNonSelectingSQL("Alter table JPA_OR_WHEEL drop constraint FK_JPA_OR_WHEEL_CHASSIS_ID"); |
| session.executeNonSelectingSQL("Alter table JPA_OR_WHEEL_NUT drop constraint FK_JPA_OR_WHEEL_NUT_WHEEL_ID"); |
| } |
| } catch (Exception ignore) {} |
| } |
| super.replaceTables(session); |
| } |
| |
| } |