/** * Build and add a field definition object to relation table */ protected void setFieldToRelationTable(DatabaseField dbField, TableDefinition table) { FieldDefinition fieldDef = getFieldDefFromDBField(dbField); if (!table.getFields().contains(fieldDef)) { //only add the field once, to avoid add twice if m:m is bi-directional. table.addField(getFieldDefFromDBField(dbField)); fieldDef.setIsPrimaryKey(true); // make this a PK as we will be creating constrains later } }
/** * Build and add a field definition object to relation table */ private void setFieldToRelationTable(DatabaseField dbField, TableDefinition tblDef) { FieldDefinition fieldDef = getFieldDefFromDBField(dbField, false); if (!tblDef.getFields().contains(fieldDef)) { //only add the field once, to avoid add twice if m:m is bi-directional. tblDef.addField(getFieldDefFromDBField(dbField, false)); fieldDef.setIsPrimaryKey(true); // make this a PK as we will be creating constrains later } }
/** * Build and add a field definition object to relation table */ protected void setFieldToRelationTable(DatabaseField dbField, TableDefinition table) { FieldDefinition fieldDef = getFieldDefFromDBField(dbField); if (!table.getFields().contains(fieldDef)) { //only add the field once, to avoid add twice if m:m is bi-directional. table.addField(getFieldDefFromDBField(dbField)); fieldDef.setIsPrimaryKey(true); // make this a PK as we will be creating constrains later } }
/** * Build a field definition object from a database field. */ private FieldDefinition getDirectCollectionReferenceKeyFieldDefFromDBField(DatabaseField dbField) { FieldDefinition fieldDef = (FieldDefinition)getFieldDefFromDBField(dbField, true).clone(); //direct collection/map table reference kye filed is not unique, need to set it as non-pk. fieldDef.setIsPrimaryKey(false); return fieldDef; }
/** * Reset field type to use BLOB/CLOB with type conversion mapping fix for 4k oracle thin driver bug. */ private void resetFieldTypeForLOB(DirectToFieldMapping mapping) { if (mapping.getFieldClassification().getName().equals("java.sql.Blob")) { //allow the platform to figure out what database field type gonna be used. //For example, Oracle9 will generate BLOB type, SQL Server generats IMAGE. getFieldDefFromDBField(mapping.getField(), false).setType(Byte[].class); } else if (mapping.getFieldClassification().getName().equals("java.sql.Clob")) { //allow the platform to figure out what database field type gonna be used. //For example, Oracle9 will generate CLOB type. SQL Server generats TEXT. getFieldDefFromDBField(mapping.getField(), false).setType(Character[].class); } }
/** * Reset field type to use BLOB/CLOB with type conversion mapping fix for 4k oracle thin driver bug. */ protected void resetFieldTypeForLOB(DirectToFieldMapping mapping) { if (mapping.getFieldClassification().getName().equals("java.sql.Blob")) { //allow the platform to figure out what database field type gonna be used. //For example, Oracle9 will generate BLOB type, SQL Server generats IMAGE. getFieldDefFromDBField(mapping.getField()).setType(Byte[].class); } else if (mapping.getFieldClassification().getName().equals("java.sql.Clob")) { //allow the platform to figure out what database field type gonna be used. //For example, Oracle9 will generate CLOB type. SQL Server generats TEXT. getFieldDefFromDBField(mapping.getField()).setType(Character[].class); } }
/** * Reset field type to use BLOB/CLOB with type conversion mapping fix for 4k oracle thin driver bug. */ protected void resetFieldTypeForLOB(DirectToFieldMapping mapping) { if (mapping.getFieldClassification().getName().equals("java.sql.Blob")) { //allow the platform to figure out what database field type gonna be used. //For example, Oracle9 will generate BLOB type, SQL Server generats IMAGE. getFieldDefFromDBField(mapping.getField()).setType(Byte[].class); } else if (mapping.getFieldClassification().getName().equals("java.sql.Clob")) { //allow the platform to figure out what database field type gonna be used. //For example, Oracle9 will generate CLOB type. SQL Server generats TEXT. getFieldDefFromDBField(mapping.getField()).setType(Character[].class); } }
/** * The ContainerPolicy may contain some additional fields that should be added to the table * * @see MappedKeyMapContainerPolicy * @param cp * @param tblDef */ private void addFieldsForMappedKeyMapContainerPolicy(ContainerPolicy cp, TableDefinition tblDef){ if (cp.isMappedKeyMapPolicy()){ List<DatabaseField> keyFields = cp.getIdentityFieldsForMapKey(); Iterator<DatabaseField> i = keyFields.iterator(); while (i.hasNext()){ DatabaseField foreignKey = i.next(); FieldDefinition fieldDef = getFieldDefFromDBField(foreignKey, false); if (!tblDef.getFields().contains(fieldDef)) { tblDef.addField(getFieldDefFromDBField(foreignKey, false)); } } Map<DatabaseField, DatabaseField> foreignKeys = ((MappedKeyMapContainerPolicy)cp).getForeignKeyFieldsForMapKey(); if (foreignKeys != null){ addForeignMappingFkConstraint(foreignKeys); } } }
/** * The ContainerPolicy may contain some additional fields that should be added to the table * * @see MappedKeyMapContainerPolicy */ protected void addFieldsForMappedKeyMapContainerPolicy(ContainerPolicy cp, TableDefinition table){ if (cp.isMappedKeyMapPolicy()){ List<DatabaseField> keyFields = cp.getIdentityFieldsForMapKey(); Iterator<DatabaseField> i = keyFields.iterator(); while (i.hasNext()){ DatabaseField foreignKey = i.next(); FieldDefinition fieldDef = getFieldDefFromDBField(foreignKey); if (!table.getFields().contains(fieldDef)) { table.addField(fieldDef); } } Map<DatabaseField, DatabaseField> foreignKeys = ((MappedKeyMapContainerPolicy)cp).getForeignKeyFieldsForMapKey(); if (foreignKeys != null){ addForeignMappingFkConstraint(foreignKeys, false); } } }
/** * The ContainerPolicy may contain some additional fields that should be added to the table * * @see MappedKeyMapContainerPolicy */ protected void addFieldsForMappedKeyMapContainerPolicy(ContainerPolicy cp, TableDefinition table){ if (cp.isMappedKeyMapPolicy()){ List<DatabaseField> keyFields = cp.getIdentityFieldsForMapKey(); Iterator<DatabaseField> i = keyFields.iterator(); while (i.hasNext()){ DatabaseField foreignKey = i.next(); FieldDefinition fieldDef = getFieldDefFromDBField(foreignKey); if (!table.getFields().contains(fieldDef)) { table.addField(fieldDef); } } Map<DatabaseField, DatabaseField> foreignKeys = ((MappedKeyMapContainerPolicy)cp).getForeignKeyFieldsForMapKey(); if (foreignKeys != null){ addForeignMappingFkConstraint(foreignKeys, false); } } }
/** * Add the foreign key to the aggregate collection mapping target table. * Also add listOrderField if specified. */ private void createAggregateTargetTable(AggregateCollectionMapping mapping) { TableDefinition targTblDef = getTableDefFromDBTable(mapping.getReferenceDescriptor().getDefaultTable()); addFieldsForMappedKeyMapContainerPolicy(mapping.getContainerPolicy(), targTblDef); Iterator aggregateFieldIterator = mapping.getReferenceDescriptor().getFields().iterator(); while (aggregateFieldIterator.hasNext()) { DatabaseField dbField = (DatabaseField) aggregateFieldIterator.next(); //add the target foreign key field definition to the table definition targTblDef.addField(getFieldDefFromDBField(dbField, false)); } //unlike normal one-to-many mapping, aggregate collection mapping does not have 1:1 back reference //mapping, so the target foreign key fields are not stored in the target descriptor. Iterator targFKIter = mapping.getTargetForeignKeyFields().iterator(); while (targFKIter.hasNext()) { DatabaseField dbField = (DatabaseField) targFKIter.next(); //add the target foreign key field definition to the table definition targTblDef.addField(getFieldDefFromDBField(dbField, false)); } if(mapping.getListOrderField() != null) { getTableDefFromDBTable(mapping.getListOrderField().getTable()).addField(getFieldDefFromDBField(mapping.getListOrderField(), false)); } }
try { Class returnType = Helper.getDeclaredMethod(mapping.getDescriptor().getJavaClass(), methodTransformation.getMethodName(), null).getReturnType(); getFieldDefFromDBField(methodTransformation.getField()).setType(returnType); } catch (NoSuchMethodException ex) { getFieldDefFromDBField(classTransformation.getField()).setType(returnType); } catch (NoSuchMethodException ex) {
try { Class returnType = Helper.getDeclaredMethod(mapping.getDescriptor().getJavaClass(), methodTransformation.getMethodName(), null).getReturnType(); getFieldDefFromDBField(methodTransformation.getField()).setType(returnType); } catch (NoSuchMethodException ex) { getFieldDefFromDBField(classTransformation.getField()).setType(returnType); } catch (NoSuchMethodException ex) {
/** * 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)); } } }
private void addForeignKeyFieldToSourceTargetTable(OneToManyMapping mapping) { addForeignMappingFkConstraint(mapping.getTargetForeignKeysToSourceKeys()); if(mapping.getListOrderField() != null) { getTableDefFromDBTable(mapping.getListOrderField().getTable()).addField(getFieldDefFromDBField(mapping.getListOrderField(), false)); } }
protected void addForeignKeyFieldToSourceTargetTable(OneToManyMapping mapping) { if (mapping.getDescriptor().hasTablePerClassPolicy()) { return; } addForeignMappingFkConstraint(mapping.getTargetForeignKeysToSourceKeys(), mapping.isCascadeOnDeleteSetOnDatabase()); if (mapping.getListOrderField() != null) { FieldDefinition fieldDef = getFieldDefFromDBField(mapping.getListOrderField()); TableDefinition table = getTableDefFromDBTable(mapping.getListOrderField().getTable()); if (!table.getFields().contains(fieldDef)) { table.addField(fieldDef); } } }
protected void addForeignKeyFieldToSourceTargetTable(OneToManyMapping mapping) { if (mapping.getDescriptor().hasTablePerClassPolicy()) { return; } addForeignMappingFkConstraint(mapping.getTargetForeignKeysToSourceKeys(), mapping.isCascadeOnDeleteSetOnDatabase()); if (mapping.getListOrderField() != null) { FieldDefinition fieldDef = getFieldDefFromDBField(mapping.getListOrderField()); TableDefinition table = getTableDefFromDBTable(mapping.getListOrderField().getTable()); if (!table.getFields().contains(fieldDef)) { table.addField(fieldDef); } } }
/** * Build relation table definitions for all many-to-many relationships in a EclipseLink descriptor. */ protected void buildRelationTableDefinition(ForeignReferenceMapping mapping, RelationTableMechanism relationTableMechanism, DatabaseField listOrderField, ContainerPolicy cp) { //first create relation table TableDefinition table = getTableDefFromDBTable(relationTableMechanism.getRelationTable()); //add source foreign key fields into the relation table List<DatabaseField> srcFkFields = relationTableMechanism.getSourceRelationKeyFields(); List<DatabaseField> srcKeyFields = relationTableMechanism.getSourceKeyFields(); buildRelationTableFields(mapping, table, srcFkFields, srcKeyFields); //add target foreign key fields into the relation table List<DatabaseField> targFkFields = relationTableMechanism.getTargetRelationKeyFields(); List<DatabaseField> targKeyFields = relationTableMechanism.getTargetKeyFields(); buildRelationTableFields(mapping, table, targFkFields, targKeyFields); if (cp != null){ addFieldsForMappedKeyMapContainerPolicy(cp, table); } if (listOrderField != null) { FieldDefinition fieldDef = getFieldDefFromDBField(listOrderField); if (!table.getFields().contains(fieldDef)) { table.addField(fieldDef); } } }
/** * Build relation table definitions for all many-to-many relationships in a EclipseLink descriptor. */ protected void buildRelationTableDefinition(ForeignReferenceMapping mapping, RelationTableMechanism relationTableMechanism, DatabaseField listOrderField, ContainerPolicy cp) { //first create relation table TableDefinition table = getTableDefFromDBTable(relationTableMechanism.getRelationTable()); //add source foreign key fields into the relation table List<DatabaseField> srcFkFields = relationTableMechanism.getSourceRelationKeyFields(); List<DatabaseField> srcKeyFields = relationTableMechanism.getSourceKeyFields(); buildRelationTableFields(mapping, table, srcFkFields, srcKeyFields); //add target foreign key fields into the relation table List<DatabaseField> targFkFields = relationTableMechanism.getTargetRelationKeyFields(); List<DatabaseField> targKeyFields = relationTableMechanism.getTargetKeyFields(); buildRelationTableFields(mapping, table, targFkFields, targKeyFields); if (cp != null){ addFieldsForMappedKeyMapContainerPolicy(cp, table); } if (listOrderField != null) { FieldDefinition fieldDef = getFieldDefFromDBField(listOrderField); if (!table.getFields().contains(fieldDef)) { table.addField(fieldDef); } } }
/** * Build relation table definitions for all many-to-many relationships in a EclipseLink descriptor. */ private void buildRelationTableDefinition(RelationTableMechanism relationTableMechanism, DatabaseField listOrderField, ContainerPolicy cp) { //first create relation table TableDefinition tblDef = getTableDefFromDBTable(relationTableMechanism.getRelationTable()); //add source foreign key fields into the relation table Vector srcFkFields = relationTableMechanism.getSourceRelationKeyFields(); Vector srcKeyFields = relationTableMechanism.getSourceKeyFields(); buildRelationTableFields(tblDef, srcFkFields, srcKeyFields); //add target foreign key fields into the relation table Vector targFkFields = relationTableMechanism.getTargetRelationKeyFields(); Vector targKeyFields = relationTableMechanism.getTargetKeyFields(); buildRelationTableFields(tblDef, targFkFields, targKeyFields); if (cp != null){ addFieldsForMappedKeyMapContainerPolicy(cp, tblDef); } if(listOrderField != null) { tblDef.addField(getFieldDefFromDBField(listOrderField, false)); } }