/** * Build field definitions and foreign key constraints for all many-to-many relation table. */ private void buildRelationTableFields(TableDefinition tblDef, Vector fkFields, Vector targetFields) { assert fkFields.size() > 0 && fkFields.size() == targetFields.size(); DatabaseField fkField = null; DatabaseField targetField = null; Vector<String> fkFieldNames = new Vector(); Vector<String> targetFieldNames = new Vector(); for (int index = 0; index < fkFields.size(); index++) { fkField = (DatabaseField) fkFields.get(index); targetField = (DatabaseField) targetFields.get(index); fkFieldNames.add(fkField.getNameDelimited(databasePlatform)); targetFieldNames.add(targetField.getNameDelimited(databasePlatform)); fkField = resolveDatabaseField(fkField, targetField); setFieldToRelationTable(fkField, tblDef); } // add a foreign key constraint from fk field to target field DatabaseTable targetTable = targetField.getTable(); TableDefinition targetTblDef = getTableDefFromDBTable(targetTable); addForeignKeyConstraint(tblDef, targetTblDef, fkFieldNames, targetFieldNames); }
targetFieldNames.add(targetField.getNameDelimited(databasePlatform)); fkField = resolveDatabaseField(fkField, targetField); setFieldToRelationTable(fkField, table);
/** * Build field definitions and foreign key constraints for all many-to-many relation table. */ protected void buildRelationTableFields(ForeignReferenceMapping mapping, TableDefinition table, List<DatabaseField> fkFields, List<DatabaseField> targetFields) { assert fkFields.size() > 0 && fkFields.size() == targetFields.size(); DatabaseField fkField = null; DatabaseField targetField = null; List<String> fkFieldNames = new ArrayList(); List<String> targetFieldNames = new ArrayList(); for (int index = 0; index < fkFields.size(); index++) { fkField = fkFields.get(index); targetField = targetFields.get(index); fkFieldNames.add(fkField.getNameDelimited(databasePlatform)); targetFieldNames.add(targetField.getNameDelimited(databasePlatform)); fkField = resolveDatabaseField(fkField, targetField); setFieldToRelationTable(fkField, table); } // add a foreign key constraint from fk field to target field DatabaseTable targetTable = targetField.getTable(); TableDefinition targetTblDef = getTableDefFromDBTable(targetTable); if (mapping.getDescriptor().hasTablePerClassPolicy()) { return; } if (mapping.getReferenceDescriptor().hasTablePerClassPolicy() && mapping.getReferenceDescriptor().getTablePerClassPolicy().hasChild()) { return; } addForeignKeyConstraint(table, targetTblDef, fkFieldNames, targetFieldNames, mapping.isCascadeOnDeleteSetOnDatabase()); }
targetFieldNames.add(targetField.getNameDelimited(databasePlatform)); fkField = resolveDatabaseField(fkField, targetField); FieldDefinition fieldDef = getFieldDefFromDBField(fkField); if (!targetTable.getFields().contains(fieldDef)) {
targetFieldNames.add(targetField.getNameDelimited(databasePlatform)); fkField = resolveDatabaseField(fkField, targetField); FieldDefinition fieldDef = getFieldDefFromDBField(fkField); if (!targetTable.getFields().contains(fieldDef)) {
targetFieldNames.add(targetField.getNameDelimited(databasePlatform)); fkField = resolveDatabaseField(fkField, targetField); FieldDefinition fieldDef = getFieldDefFromDBField(fkField);
targetFieldNames.add(targetField.getNameDelimited(databasePlatform)); fkField = resolveDatabaseField(fkField, targetField); FieldDefinition fieldDef = getFieldDefFromDBField(fkField);
/** * Build direct collection table definitions in a EclipseLink descriptor */ private void buildDirectCollectionTableDefinition(DirectCollectionMapping mapping, ClassDescriptor desc) { //first create direct collection table TableDefinition tblDef = getTableDefFromDBTable(mapping.getReferenceTable()); DatabaseField dbField = null; //add the table reference key(s) Vector refPkFields = mapping.getReferenceKeyFields(); for (int index = 0; index < refPkFields.size(); index++) { dbField = resolveDatabaseField((DatabaseField) refPkFields.get(index), mapping.getSourceKeyFields().get(index)); tblDef.addField(getDirectCollectionReferenceKeyFieldDefFromDBField(dbField)); } //add the direct collection field to the table. tblDef.addField(getFieldDefFromDBField(mapping.getDirectField(), false)); //if the mapping is direct-map field, add the direct key field to the table as well. // TODO: avoid generating DDL for map key mappings for the time being. // Bug: 270814 if (mapping.isDirectMapMapping() && ! mapping.getContainerPolicy().isMappedKeyMapPolicy() ) { dbField = ((DirectMapMapping) mapping).getDirectKeyField(); tblDef.addField(getFieldDefFromDBField(dbField, false)); } else { addFieldsForMappedKeyMapContainerPolicy(mapping.getContainerPolicy(), tblDef); if(mapping.getListOrderField() != null) { tblDef.addField(getFieldDefFromDBField(mapping.getListOrderField(), false)); } } }