@Override public Object getAttributeValueFromObject(Object object) { List sourceFields = ((ManyToManyMapping)object).getSourceKeyFields(); List relationFields = ((ManyToManyMapping)object).getSourceRelationKeyFields(); List associations = new ArrayList(sourceFields.size()); for (int index = 0; index < sourceFields.size(); index++) { associations.add(new Association(relationFields.get(index), sourceFields.get(index))); } return associations; }
public Object getAttributeValueFromObject(Object object) { List sourceFields = ((ManyToManyMapping)object).getSourceKeyFields(); List relationFields = ((ManyToManyMapping)object).getSourceRelationKeyFields(); List associations = new ArrayList(sourceFields.size()); for (int index = 0; index < sourceFields.size(); index++) { associations.add(new Association(relationFields.get(index), sourceFields.get(index))); } return associations; }
public Object getAttributeValueFromObject(Object object) { List sourceFields = ((ManyToManyMapping)object).getSourceKeyFields(); List relationFields = ((ManyToManyMapping)object).getSourceRelationKeyFields(); List associations = new ArrayList(sourceFields.size()); for (int index = 0; index < sourceFields.size(); index++) { associations.add(new Association(relationFields.get(index), sourceFields.get(index))); } return associations; }
/** * INTERNAL: * The translation row may require additional fields than the primary key if the mapping in not on the primary key. */ @Override protected void prepareTranslationRow(AbstractRecord translationRow, Object object, ClassDescriptor descriptor, AbstractSession session) { // Make sure that each source key field is in the translation row. for (Enumeration sourceFieldsEnum = getSourceKeyFields().elements(); sourceFieldsEnum.hasMoreElements();) { DatabaseField sourceKey = (DatabaseField)sourceFieldsEnum.nextElement(); if (!translationRow.containsKey(sourceKey)) { Object value = descriptor.getObjectBuilder().extractValueFromObjectForField(object, sourceKey, session); translationRow.put(sourceKey, value); } } }
public void setAttributeValueInObject(Object object, Object value) { ManyToManyMapping mapping = (ManyToManyMapping)object; List associations = (List)value; mapping.setSourceKeyFields(NonSynchronizedVector.newInstance(associations.size())); mapping.setSourceRelationKeyFields(NonSynchronizedVector.newInstance(associations.size())); Iterator iterator = associations.iterator(); while (iterator.hasNext()) { Association association = (Association)iterator.next(); mapping.getSourceKeyFields().add((DatabaseField)association.getValue()); mapping.getSourceRelationKeyFields().add((DatabaseField)association.getKey()); } } });
public void setAttributeValueInObject(Object object, Object value) { ManyToManyMapping mapping = (ManyToManyMapping)object; List associations = (List)value; mapping.setSourceKeyFields(NonSynchronizedVector.newInstance(associations.size())); mapping.setSourceRelationKeyFields(NonSynchronizedVector.newInstance(associations.size())); Iterator iterator = associations.iterator(); while (iterator.hasNext()) { Association association = (Association)iterator.next(); mapping.getSourceKeyFields().add((DatabaseField)association.getValue()); mapping.getSourceRelationKeyFields().add((DatabaseField)association.getKey()); } } });
/** * INTERNAL: * The translation row may require additional fields than the primary key if the mapping in not on the primary key. */ @Override protected void prepareTranslationRow(AbstractRecord translationRow, Object object, ClassDescriptor descriptor, AbstractSession session) { // Make sure that each source key field is in the translation row. for (Enumeration sourceFieldsEnum = getSourceKeyFields().elements(); sourceFieldsEnum.hasMoreElements();) { DatabaseField sourceKey = (DatabaseField)sourceFieldsEnum.nextElement(); if (!translationRow.containsKey(sourceKey)) { Object value = descriptor.getObjectBuilder().extractValueFromObjectForField(object, sourceKey, session); translationRow.put(sourceKey, value); } } }
@Override public void setAttributeValueInObject(Object object, Object value) { ManyToManyMapping mapping = (ManyToManyMapping)object; List associations = (List)value; mapping.setSourceKeyFields(NonSynchronizedVector.newInstance(associations.size())); mapping.setSourceRelationKeyFields(NonSynchronizedVector.newInstance(associations.size())); Iterator iterator = associations.iterator(); while (iterator.hasNext()) { Association association = (Association)iterator.next(); mapping.getSourceKeyFields().add((DatabaseField)association.getValue()); mapping.getSourceRelationKeyFields().add((DatabaseField)association.getKey()); } } });
/** * INTERNAL: * The translation row may require additional fields than the primary key if the mapping in not on the primary key. */ protected void prepareTranslationRow(AbstractRecord translationRow, Object object, AbstractSession session) { // Make sure that each source key field is in the translation row. for (Enumeration sourceFieldsEnum = getSourceKeyFields().elements(); sourceFieldsEnum.hasMoreElements();) { DatabaseField sourceKey = (DatabaseField)sourceFieldsEnum.nextElement(); if (!translationRow.containsKey(sourceKey)) { Object value = getDescriptor().getObjectBuilder().extractValueFromObjectForField(object, sourceKey, session); translationRow.put(sourceKey, value); } } }
/** * INTERNAL: * Extract the primary key value from the source row. * Used for batch reading, most following same order and fields as in the mapping. */ protected Vector extractPrimaryKeyFromRow(AbstractRecord row, AbstractSession session) { Vector key = new Vector(getSourceKeyFields().size()); for (Enumeration fieldEnum = getSourceKeyFields().elements(); fieldEnum.hasMoreElements();) { DatabaseField field = (DatabaseField)fieldEnum.nextElement(); Object value = row.get(field); // Must ensure the classification gets a cache hit. try { value = session.getDatasourcePlatform().getConversionManager().convertObject(value, getDescriptor().getObjectBuilder().getFieldClassification(field)); } catch (ConversionException e) { throw ConversionException.couldNotBeConverted(this, getDescriptor(), e); } key.addElement(value); } return key; }
protected void addManyToManyMappingLines(NonreflectiveMethodDefinition method, String mappingName, ManyToManyMapping mapping) { if (mapping.getRelationTable() != null) { method.addLine(mappingName + ".setRelationTableName(\"" + mapping.getRelationTable().getQualifiedName() + "\");"); } Enumeration sourceRelationKeysEnum = mapping.getSourceRelationKeyFields().elements(); Enumeration sourceKeysEnum = mapping.getSourceKeyFields().elements(); while (sourceRelationKeysEnum.hasMoreElements()) { DatabaseField sourceField = (DatabaseField)sourceKeysEnum.nextElement(); DatabaseField relationField = (DatabaseField)sourceRelationKeysEnum.nextElement(); method.addLine(mappingName + ".addSourceRelationKeyFieldName(\"" + relationField.getQualifiedName() + "\", \"" + sourceField.getQualifiedName() + "\");"); } Enumeration targetRelationKeysEnum = mapping.getTargetRelationKeyFields().elements(); Enumeration targetKeysEnum = mapping.getTargetKeyFields().elements(); while (targetRelationKeysEnum.hasMoreElements()) { DatabaseField targetField = (DatabaseField)targetKeysEnum.nextElement(); DatabaseField relationField = (DatabaseField)targetRelationKeysEnum.nextElement(); method.addLine(mappingName + ".addTargetRelationKeyFieldName(\"" + relationField.getQualifiedName() + "\", \"" + targetField.getQualifiedName() + "\");"); } addHistoryPolicyLines(method, mapping, mappingName); }
protected void addManyToManyMappingLines(NonreflectiveMethodDefinition method, String mappingName, ManyToManyMapping mapping) { if (mapping.getRelationTable() != null) { method.addLine(mappingName + ".setRelationTableName(\"" + mapping.getRelationTable().getQualifiedName() + "\");"); } Enumeration sourceRelationKeysEnum = mapping.getSourceRelationKeyFields().elements(); Enumeration sourceKeysEnum = mapping.getSourceKeyFields().elements(); while (sourceRelationKeysEnum.hasMoreElements()) { DatabaseField sourceField = (DatabaseField)sourceKeysEnum.nextElement(); DatabaseField relationField = (DatabaseField)sourceRelationKeysEnum.nextElement(); method.addLine(mappingName + ".addSourceRelationKeyFieldName(\"" + relationField.getQualifiedName() + "\", \"" + sourceField.getQualifiedName() + "\");"); } Enumeration targetRelationKeysEnum = mapping.getTargetRelationKeyFields().elements(); Enumeration targetKeysEnum = mapping.getTargetKeyFields().elements(); while (targetRelationKeysEnum.hasMoreElements()) { DatabaseField targetField = (DatabaseField)targetKeysEnum.nextElement(); DatabaseField relationField = (DatabaseField)targetRelationKeysEnum.nextElement(); method.addLine(mappingName + ".addTargetRelationKeyFieldName(\"" + relationField.getQualifiedName() + "\", \"" + targetField.getQualifiedName() + "\");"); } addHistoryPolicyLines(method, mapping, mappingName); }
protected void addManyToManyMappingLines(NonreflectiveMethodDefinition method, String mappingName, ManyToManyMapping mapping) { if (mapping.getRelationTable() != null) { method.addLine(mappingName + ".setRelationTableName(\"" + mapping.getRelationTable().getQualifiedName() + "\");"); } Enumeration sourceRelationKeysEnum = mapping.getSourceRelationKeyFields().elements(); Enumeration sourceKeysEnum = mapping.getSourceKeyFields().elements(); while (sourceRelationKeysEnum.hasMoreElements()) { DatabaseField sourceField = (DatabaseField)sourceKeysEnum.nextElement(); DatabaseField relationField = (DatabaseField)sourceRelationKeysEnum.nextElement(); method.addLine(mappingName + ".addSourceRelationKeyFieldName(\"" + relationField.getQualifiedName() + "\", \"" + sourceField.getQualifiedName() + "\");"); } Enumeration targetRelationKeysEnum = mapping.getTargetRelationKeyFields().elements(); Enumeration targetKeysEnum = mapping.getTargetKeyFields().elements(); while (targetRelationKeysEnum.hasMoreElements()) { DatabaseField targetField = (DatabaseField)targetKeysEnum.nextElement(); DatabaseField relationField = (DatabaseField)targetRelationKeysEnum.nextElement(); method.addLine(mappingName + ".addTargetRelationKeyFieldName(\"" + relationField.getQualifiedName() + "\", \"" + targetField.getQualifiedName() + "\");"); } addHistoryPolicyLines(method, mapping, mappingName); }
/** * INTERNAL: * Extract the source primary key value from the relation row. * Used for batch reading, most following same order and fields as in the mapping. */ protected Vector extractKeyFromTargetRow(AbstractRecord row, AbstractSession session) { Vector key = new Vector(getSourceRelationKeyFields().size()); for (int index = 0; index < getSourceRelationKeyFields().size(); index++) { DatabaseField relationField = getSourceRelationKeyFields().elementAt(index); DatabaseField sourceField = getSourceKeyFields().elementAt(index); Object value = row.get(relationField); // Must ensure the classification gets a cache hit. try { value = session.getDatasourcePlatform().getConversionManager().convertObject(value, getDescriptor().getObjectBuilder().getFieldClassification(sourceField)); } catch (ConversionException e) { throw ConversionException.couldNotBeConverted(this, getDescriptor(), e); } key.addElement(value); } return key; }
protected Vector buildDeleteAllStatementsForMappings(SQLCall selectCallForExist, SQLSelectStatement selectStatementForExist, boolean dontCheckDescriptor) { Vector deleteStatements = new Vector(); Iterator itMappings = getDescriptor().getMappings().iterator(); while(itMappings.hasNext()) { DatabaseMapping mapping = (DatabaseMapping)itMappings.next(); if(mapping.isManyToManyMapping() || mapping.isDirectCollectionMapping()) { if(dontCheckDescriptor || mapping.getDescriptor().equals(getDescriptor())) { Vector sourceFields = null; Vector targetFields = null; if(mapping.isManyToManyMapping()) { sourceFields = ((ManyToManyMapping)mapping).getSourceKeyFields(); targetFields = ((ManyToManyMapping)mapping).getSourceRelationKeyFields(); } else if(mapping.isDirectCollectionMapping()) { sourceFields = ((DirectCollectionMapping)mapping).getSourceKeyFields(); targetFields = ((DirectCollectionMapping)mapping).getReferenceKeyFields(); } deleteStatements.addElement(buildDeleteAllStatementForMapping(selectCallForExist, selectStatementForExist, sourceFields, targetFields)); } } } return deleteStatements; }
if (collectionMapping instanceof ManyToManyMapping) { ManyToManyMapping manyToManyMapping = (ManyToManyMapping) collectionMapping; Vector<DatabaseField> sourceKeyFields = manyToManyMapping.getSourceKeyFields(); Vector<DatabaseField> sourceRelationKeyFields = manyToManyMapping.getSourceRelationKeyFields(); Vector<DatabaseField> targetKeyFields = manyToManyMapping.getTargetKeyFields();
/** * Initialize delete all query. This query is used to all relevant rows from the * relation table. */ protected void initializeDeleteAllQuery(AbstractSession session) { if (!getDeleteAllQuery().hasSessionName()) { getDeleteAllQuery().setSessionName(session.getName()); } if (hasCustomDeleteAllQuery()) { return; } Expression expression = null; Expression subExpression; Expression builder = new ExpressionBuilder(); SQLDeleteStatement statement = new SQLDeleteStatement(); // Construct an expression to delete from the relation table. for (int index = 0; index < getSourceRelationKeyFields().size(); index++) { DatabaseField sourceRelationKey = getSourceRelationKeyFields().elementAt(index); DatabaseField sourceKey = getSourceKeyFields().elementAt(index); subExpression = builder.getField(sourceRelationKey).equal(builder.getParameter(sourceKey)); expression = subExpression.and(expression); } // All the entries are deleted in one shot. statement.setWhereClause(expression); statement.setTable(getRelationTable()); getDeleteAllQuery().setSQLStatement(statement); }
DatabaseField sourceKey = getSourceKeyFields().elementAt(index);
DatabaseField sourceKey = getSourceKeyFields().elementAt(index);
ManyToManyMapping mappingClone = (ManyToManyMapping) mapping; mappingClone.setRelationTable(overrideMapping.getRelationTable()); mappingClone.setSourceKeyFields(overrideMapping.getSourceKeyFields()); mappingClone.setSourceRelationKeyFields(overrideMapping.getSourceRelationKeyFields()); mappingClone.setTargetKeyFields(overrideMapping.getTargetKeyFields());