/** * PUBLIC: * Add a foreign key constraint to the table. * If there is a same name foreign key constraint already, nothing will happen. */ public void addForeignKeyConstraint(ForeignKeyConstraint foreignKey) { if (! hasUserDefinedForeignKeyConstraints) { if (!foreignKeyMap.containsKey(foreignKey.getName())) { foreignKeyMap.put(foreignKey.getName(), foreignKey); } } }
public void addSourceField(String sourceField) { getSourceFields().add(sourceField); }
public void addTargetField(String targetField) { getTargetFields().addElement(targetField); }
/** * Build a foreign key constraint. */ protected ForeignKeyConstraint buildForeignKeyConstraint(Vector fkFieldNames, Vector pkFieldNames, TableDefinition targetTable, DatabasePlatform platform) { assert fkFieldNames.size() > 0 && fkFieldNames.size() == pkFieldNames.size(); ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint(); for(int i=0; i<fkFieldNames.size(); i++) { fkConstraint.getSourceFields().add(fkFieldNames.get(i)); fkConstraint.getTargetFields().add(pkFieldNames.get(i)); } fkConstraint.setTargetTable(targetTable.getFullName()); String fkFieldName = (String)fkFieldNames.get(0); String name = buildForeignKeyConstraintName(this.getName(), fkFieldName, platform.getMaxForeignKeyNameSize(), platform); fkConstraint.setName(name); return fkConstraint; }
/** * Build a foreign key constraint using FieldDefinition.getForeignKeyFieldName(). */ protected ForeignKeyConstraint buildForeignKeyConstraint(FieldDefinition field, DatabasePlatform platform) { Vector sourceFields = new Vector(); Vector targetFields = new Vector(); ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint(); DatabaseField tempTargetField = new DatabaseField(field.getForeignKeyFieldName()); DatabaseField tempSourceField = new DatabaseField(field.getName()); sourceFields.addElement(tempSourceField.getName()); targetFields.addElement(tempTargetField.getName()); fkConstraint.setSourceFields(sourceFields); fkConstraint.setTargetFields(targetFields); fkConstraint.setTargetTable(tempTargetField.getTable().getQualifiedNameDelimited(platform)); String tempName = buildForeignKeyConstraintName(this.getName(), tempSourceField.getName(), platform.getMaxForeignKeyNameSize(), platform); fkConstraint.setName(tempName); return fkConstraint; }
if (hasForeignKeyDefinition()) { writer.write(getForeignKeyDefinition()); } else { writer.write("FOREIGN KEY ("); for (Iterator iterator = getSourceFields().iterator(); iterator.hasNext();) { writer.write((String)iterator.next()); if (iterator.hasNext()) { writer.write(getTargetTable()); writer.write(" ("); for (Iterator iterator = getTargetFields().iterator(); iterator.hasNext();) { writer.write((String)iterator.next()); if (iterator.hasNext()) { if (shouldCascadeOnDelete() && session.getPlatform().supportsDeleteOnCascade()) { writer.write(" ON DELETE CASCADE");
protected void addForeignKeyLines(ForeignKeyConstraint foreignKey, NonreflectiveMethodDefinition method) { String foreignKeyName = "foreignKey" + foreignKey.getName(); method.addLine("ForeignKeyConstraint " + foreignKeyName + " = new ForeignKeyConstraint();"); method.addLine(foreignKeyName + ".setName(\"" + foreignKey.getName() + "\");"); method.addLine(foreignKeyName + ".setTargetTable(\"" + foreignKey.getTargetTable() + "\");"); for (String sourceField : foreignKey.getSourceFields()) { method.addLine(foreignKeyName + ".addSourceField(\"" + sourceField + "\");"); } for (String targetField : foreignKey.getTargetFields()) { method.addLine(foreignKeyName + ".addTargetField(\"" + targetField + "\");"); } method.addLine("table.addForeignKeyConstraint(" + foreignKeyName + ");"); }
try { writer.write("FOREIGN KEY ("); for (Enumeration sourceEnum = getSourceFields().elements(); sourceEnum.hasMoreElements();) { writer.write((String)sourceEnum.nextElement()); writer.write(getTargetTable()); writer.write(" ("); for (Enumeration targetEnum = getTargetFields().elements(); targetEnum.hasMoreElements();) { writer.write((String)targetEnum.nextElement()); if (shouldCascadeOnDelete()) { writer.write(" ON DELETE CASCADE");
if (!foreignKey.isDisableForeignKey()) { if ((primaryKeys.size() == foreignKey.getSourceFields().size()) && primaryKeys.containsAll(foreignKey.getSourceFields())) { alreadyIndexed = true; if (foreignKey.getSourceFields().size() == 1) { FieldDefinition field = getField(foreignKey.getSourceFields().get(0)); if ((field != null) && field.isUnique()) { alreadyIndexed = true; if ((uniqueConstraint.getSourceFields().size() == foreignKey.getSourceFields().size()) && uniqueConstraint.getSourceFields().containsAll(foreignKey.getSourceFields())) { alreadyIndexed = true; IndexDefinition index = buildIndex(session, foreignKey.getName(), foreignKey.getSourceFields(), false); if (writer == null) { try {
/** * INTERNAL: * Process this JPA metadata into an EclipseLink ForeignKeyConstraint. */ public void process(DatabaseTable table) { if (! isProviderDefaultConstraintMode()) { ForeignKeyConstraint foreignKeyConstraint = new ForeignKeyConstraint(); foreignKeyConstraint.setName(getName()); foreignKeyConstraint.setForeignKeyDefinition(getForeignKeyDefinition()); foreignKeyConstraint.setDisableForeignKey(isNoConstraintMode()); table.addForeignKeyConstraint(foreignKeyConstraint); } }
/** * INTERNAL: * Return the alter table statement to add the constraints. * This is done separately from the create because of dependencies. */ public Writer buildConstraintCreationWriter(AbstractSession session, ForeignKeyConstraint foreignKey, Writer writer) throws ValidationException { try { writer.write("ALTER TABLE " + getFullName()); writer.write(" ADD CONSTRAINT "); if (!session.getPlatform().shouldPrintConstraintNameAfter()) { writer.write(foreignKey.getName() + " "); } foreignKey.appendDBString(writer, session); if (session.getPlatform().shouldPrintConstraintNameAfter()) { writer.write(" CONSTRAINT " + foreignKey.getName()); } } catch (IOException ioException) { throw ValidationException.fileError(ioException); } return writer; }
/** * PUBLIC: * Disables delete cascading on the database, this is the default. */ public void dontCascadeOnDelete() { setShouldCascadeOnDelete(false); }
/** * PUBLIC: * Add a foreign key constraint to the table. * If there is a same name foreign key constraint already, nothing will happen. */ public void addForeignKeyConstraint(String name, String sourceField, String targetField, String targetTable) { ForeignKeyConstraint foreignKey = new ForeignKeyConstraint(name, sourceField, targetField, targetTable); addForeignKeyConstraint(foreignKey); }
/** * Build a foreign key constraint. */ protected ForeignKeyConstraint buildForeignKeyConstraint(List<String> fkFieldNames, List<String> pkFieldNames, TableDefinition targetTable, DatabasePlatform platform) { assert fkFieldNames.size() > 0 && fkFieldNames.size() == pkFieldNames.size(); ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint(); for(int i=0; i<fkFieldNames.size(); i++) { fkConstraint.getSourceFields().add(fkFieldNames.get(i)); fkConstraint.getTargetFields().add(pkFieldNames.get(i)); } fkConstraint.setTargetTable(targetTable.getFullName()); String fkFieldName = fkFieldNames.get(0); String name = buildForeignKeyConstraintName(this.getName(), fkFieldName, platform.getMaxForeignKeyNameSize(), platform); fkConstraint.setName(name); return fkConstraint; }
/** * Build a foreign key constraint using FieldDefinition.getForeignKeyFieldName(). */ protected ForeignKeyConstraint buildForeignKeyConstraint(FieldDefinition field, DatabasePlatform platform) { Vector sourceFields = new Vector(); Vector targetFields = new Vector(); ForeignKeyConstraint fkConstraint = new ForeignKeyConstraint(); DatabaseField tempTargetField = new DatabaseField(field.getForeignKeyFieldName()); DatabaseField tempSourceField = new DatabaseField(field.getName()); sourceFields.add(tempSourceField.getName()); targetFields.add(tempTargetField.getName()); fkConstraint.setSourceFields(sourceFields); fkConstraint.setTargetFields(targetFields); fkConstraint.setTargetTable(tempTargetField.getTable().getQualifiedNameDelimited(platform)); String tempName = buildForeignKeyConstraintName(this.getName(), tempSourceField.getName(), platform.getMaxForeignKeyNameSize(), platform); fkConstraint.setName(tempName); return fkConstraint; }
if (hasForeignKeyDefinition()) { writer.write(getForeignKeyDefinition()); } else { writer.write("FOREIGN KEY ("); for (Iterator iterator = getSourceFields().iterator(); iterator.hasNext();) { writer.write((String)iterator.next()); if (iterator.hasNext()) { writer.write(getTargetTable()); writer.write(" ("); for (Iterator iterator = getTargetFields().iterator(); iterator.hasNext();) { writer.write((String)iterator.next()); if (iterator.hasNext()) { if (shouldCascadeOnDelete() && session.getPlatform().supportsDeleteOnCascade()) { writer.write(" ON DELETE CASCADE");
protected void addForeignKeyLines(ForeignKeyConstraint foreignKey, NonreflectiveMethodDefinition method) { String foreignKeyName = "foreignKey" + foreignKey.getName(); method.addLine("ForeignKeyConstraint " + foreignKeyName + " = new ForeignKeyConstraint();"); method.addLine(foreignKeyName + ".setName(\"" + foreignKey.getName() + "\");"); method.addLine(foreignKeyName + ".setTargetTable(\"" + foreignKey.getTargetTable() + "\");"); for (String sourceField : foreignKey.getSourceFields()) { method.addLine(foreignKeyName + ".addSourceField(\"" + sourceField + "\");"); } for (String targetField : foreignKey.getTargetFields()) { method.addLine(foreignKeyName + ".addTargetField(\"" + targetField + "\");"); } method.addLine("table.addForeignKeyConstraint(" + foreignKeyName + ");"); }
if (!foreignKey.isDisableForeignKey()) { if (!foreignKey.isDisableForeignKey()) { if ((primaryKeys.size() == foreignKey.getSourceFields().size()) && primaryKeys.containsAll(foreignKey.getSourceFields())) { alreadyIndexed = true; if (foreignKey.getSourceFields().size() == 1) { FieldDefinition field = getField(foreignKey.getSourceFields().get(0)); if ((field != null) && field.isUnique()) { alreadyIndexed = true; if ((uniqueConstraint.getSourceFields().size() == foreignKey.getSourceFields().size()) && uniqueConstraint.getSourceFields().containsAll(foreignKey.getSourceFields())) { alreadyIndexed = true; IndexDefinition index = buildIndex(session, foreignKey.getName(), foreignKey.getSourceFields(), false); if (writer == null) { try {
/** * INTERNAL: * Return the alter table statement to add the constraints. * This is done separately from the create because of dependencies. */ public Writer buildConstraintCreationWriter(AbstractSession session, ForeignKeyConstraint foreignKey, Writer writer) throws ValidationException { try { writer.write("ALTER TABLE " + getFullName()); writer.write(" ADD CONSTRAINT "); if (!session.getPlatform().shouldPrintConstraintNameAfter()) { writer.write(foreignKey.getName() + " "); } foreignKey.appendDBString(writer, session); if (session.getPlatform().shouldPrintConstraintNameAfter()) { writer.write(" CONSTRAINT " + foreignKey.getName()); } } catch (IOException ioException) { throw ValidationException.fileError(ioException); } return writer; }
/** * PUBLIC: * Enables delete cascading on the database. * This must be used carefully, i.e. only private relationships. */ public void cascadeOnDelete() { setShouldCascadeOnDelete(true); }