KeyElementAccessor[] pkElementArray = this.getKeyClassFields(getPKClass()); if (pkElementArray.length == 1 && pkElementArray[0] instanceof KeyIsElementAccessor) { DatabaseMapping mapping = getDescriptor().getObjectBuilder().getMappingForAttributeName(pkElementArray[0].getAttributeName()); if (mapping.isDirectToFieldMapping()) { Converter converter = ((DirectToFieldMapping) mapping).getConverter(); DatabaseMapping mapping = getDescriptor().getObjectBuilder().getMappingForAttributeName(accessor.getAttributeName()); Object fieldValue = null; if (mapping.isDirectToFieldMapping()) { accessor.setValue(keyInstance, fieldValue);
DatabaseMapping mapping = pkElementArray[index].getMapping(); Object fieldValue = null; if (mapping.isAbstractColumnMapping()) { if (pkElementArray[index].isNestedAccessor()) { DatabaseField keyField = pkElementArray[index].getDatabaseField(); Object keyToUse = key; DatabaseMapping keyMapping = getDescriptor().getObjectBuilder().getMappingForField(keyField); fieldValue = ((AbstractColumnMapping)mapping).getFieldValue(pkElementArray[index].getValue(keyToUse, session), session); } else { fieldValue = ((AbstractColumnMapping)mapping).getFieldValue(pkElementArray[index].getValue(keyToUse, session), session); fieldValue = ((AbstractColumnMapping)mapping).getFieldValue(pkElementArray[index].getValue(key, session), session); fieldValue = pkElementArray[index].getValue(key, session); if ( (fieldValue !=null) && (pkClass != null) && (mapping.isOneToOneMapping()) ){ OneToOneMapping refmapping = (OneToOneMapping)mapping; DatabaseField targetKey = refmapping.getSourceToTargetKeyFields().get(pkElementArray[index].getDatabaseField()); CMPPolicy refPolicy = refmapping.getReferenceDescriptor().getCMPPolicy(); if (refPolicy.isCMP3Policy()){
if (isSingleKey(pkElementArray)) { for (KeyElementAccessor accessor: pkElementArray){ DatabaseMapping mapping = getDescriptor().getObjectBuilder().getMappingForAttributeName(accessor.getAttributeName()); if (mapping != null && !mapping.isMultitenantPrimaryKeyMapping()){ if (mapping.isAbstractColumnMapping()) { DatabaseMapping mapping = getDescriptor().getObjectBuilder().getMappingForAttributeName(accessor.getAttributeName()); if (mapping == null) { mapping = getDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField()); if (accessor.isNestedAccessor()) { setFieldValue(accessor, keyInstance, mapping.getReferenceDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField()), session, elementIndex, keyElements); } else { mapping = mapping.getReferenceDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField());
for (int index = 0; index < keyElements.length; ++index) { Object toWriteInto = bean; Object keyFieldValue = keyElements[index].getValue(key, session); DatabaseField field = keyElements[index].getDatabaseField(); DatabaseMapping mapping = this.getDescriptor().getObjectBuilder().getMappingForAttributeName(keyElements[index].getAttributeName()); if (mapping == null) {// must be aggregate mapping = this.getDescriptor().getObjectBuilder().getMappingForField(field); mapping.setRealAttributeValueInObject(toWriteInto, aggregate); mapping = mapping.getReferenceDescriptor().getObjectBuilder().getMappingForAttributeName(keyElements[index].getAttributeName()); if (mapping == null) {// must be aggregate mapping = this.getDescriptor().getObjectBuilder().getMappingForField(field);
ObjectBuilder builder = getDescriptor().getObjectBuilder(); if (pkElementArray.length == 1 && pkElementArray[0] instanceof KeyIsElementAccessor){ DatabaseMapping mapping = builder.getMappingForAttributeName(pkElementArray[0].getAttributeName()); Object fieldValue = mapping.getRealAttributeValueFromObject(object, session); if (mapping.isObjectReferenceMapping()){ Object keyObj = object; KeyElementAccessor accessor = pkElementArray[index]; DatabaseField field = accessor.getDatabaseField(); DatabaseMapping mapping = builder.getMappingForField(field); Object nestedKeyInstance = keyInstance; usedObjectReferenceMappings.add((ObjectReferenceMapping)mapping); accessor.setValue(nestedKeyInstance, fieldValue);
ObjectBuilder builder = getDescriptor().getObjectBuilder(); if (pkElementArray.length == 1 && pkElementArray[0] instanceof KeyIsElementAccessor){ DatabaseMapping mapping = builder.getMappingForAttributeName(pkElementArray[0].getAttributeName()); Object fieldValue = mapping.getRealAttributeValueFromObject(object, session); if (mapping.isObjectReferenceMapping()){ Object keyObj = object; KeyElementAccessor accessor = pkElementArray[index]; DatabaseField field = accessor.getDatabaseField(); DatabaseMapping mapping = builder.getMappingForField(field); usedObjectReferenceMappings.add((ObjectReferenceMapping)mapping); accessor.setValue(keyInstance, fieldValue);
if (isSingleKey(pkElementArray)) { for (KeyElementAccessor accessor: pkElementArray){ DatabaseMapping mapping = getDescriptor().getObjectBuilder().getMappingForAttributeName(accessor.getAttributeName()); if (mapping != null && !mapping.isMultitenantPrimaryKeyMapping()){ if (mapping.isAbstractColumnMapping()) { DatabaseMapping mapping = getDescriptor().getObjectBuilder().getMappingForAttributeName(accessor.getAttributeName()); if (mapping == null) { mapping = getDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField()); if (accessor.isNestedAccessor()) { setFieldValue(accessor, keyInstance, mapping.getReferenceDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField()), session, elementIndex, keyElements); } else { mapping = mapping.getReferenceDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField());
ObjectBuilder builder = getDescriptor().getObjectBuilder(); if (pkElementArray.length == 1 && pkElementArray[0] instanceof KeyIsElementAccessor){ DatabaseMapping mapping = builder.getMappingForAttributeName(pkElementArray[0].getAttributeName()); Object fieldValue = mapping.getRealAttributeValueFromObject(key, session); if (mapping.isObjectReferenceMapping()){ Object keyObj = key; KeyElementAccessor accessor = pkElementArray[index]; DatabaseField field = accessor.getDatabaseField(); DatabaseMapping mapping = builder.getMappingForField(field); usedObjectReferenceMappings.add((ObjectReferenceMapping)mapping); accessor.setValue(keyInstance, fieldValue);
Object fieldValue = null; KeyElementAccessor accessor = this.fieldToAccessorMap.get(field); DatabaseMapping mapping = accessor.getMapping(); if (mapping.isAbstractColumnMapping()) { fieldValue = ((AbstractColumnMapping)mapping).getFieldValue(accessor.getValue(key, session), session); } else { fieldValue = accessor.getValue(key, session); if (mapping.isOneToOneMapping()){ OneToOneMapping refmapping = (OneToOneMapping)mapping; DatabaseField targetKey = refmapping.getSourceToTargetKeyFields().get(accessor.getDatabaseField()); CMPPolicy refPolicy = refmapping.getReferenceDescriptor().getCMPPolicy(); if (refPolicy.isCMP3Policy()){
/** * INTERNAL: * Recursive method to set a field value in the given key instance. */ protected void setFieldValue(KeyElementAccessor accessor, Object keyInstance, DatabaseMapping mapping, AbstractSession session, int[] elementIndex, Object ... keyElements) { if (mapping.isAggregateMapping()) { Object nestedObject = mapping.getRealAttributeValueFromObject(keyInstance, session); if (nestedObject == null) { nestedObject = getClassInstance(mapping.getReferenceDescriptor().getJavaClass()); mapping.setRealAttributeValueInObject(keyInstance, nestedObject); } // keep drilling down the nested mappings ... setFieldValue(accessor, nestedObject, mapping.getReferenceDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField()), session, elementIndex, keyElements); } else { Object fieldValue = null; if (mapping.isAbstractColumnMapping()) { fieldValue = keyElements[elementIndex[0]]; Converter converter = ((AbstractColumnMapping) mapping).getConverter(); if (converter != null){ fieldValue = converter.convertDataValueToObjectValue(fieldValue, session); } ++elementIndex[0]; } else if (mapping.isObjectReferenceMapping()) { // what if mapping comes from derived ID. need to get the derived mapping. // get reference descriptor and extract pk from target cmp policy fieldValue = mapping.getReferenceDescriptor().getCMPPolicy().createPrimaryKeyInstanceFromPrimaryKeyValues(session, elementIndex, keyElements); } accessor.setValue(keyInstance, fieldValue); } }
/** * Check to see if there is a single key element. Iterate through the list of primary key elements * and count only keys that are not part of the Multitenant identifier. * * @param pkElementArray * @return */ protected boolean isSingleKey(KeyElementAccessor[] pkElementArray){ if ((pkElementArray.length == 1) && (pkElementArray[0] instanceof KeyIsElementAccessor)) { return true; } boolean foundFirstElement = false; for (KeyElementAccessor accessor: pkElementArray){ if (!(accessor instanceof KeyIsElementAccessor)){ return false; } if (!accessor.getMapping().isMultitenantPrimaryKeyMapping()){ if (foundFirstElement){ return false; } foundFirstElement = true; } } return true; }
setFieldValue(accessor, nestedObject, mapping.getReferenceDescriptor().getObjectBuilder().getMappingForField(accessor.getDatabaseField()), session, elementIndex, keyElements); } else { Object fieldValue = null; accessor.setValue(keyInstance, fieldValue);
/** * Check to see if there is a single key element. Iterate through the list of primary key elements * and count only keys that are not part of the Multitenant identifier. * * @param pkElementArray * @return */ protected boolean isSingleKey(KeyElementAccessor[] pkElementArray){ if ((pkElementArray.length == 1) && (pkElementArray[0] instanceof KeyIsElementAccessor)) { return true; } boolean foundFirstElement = false; for (KeyElementAccessor accessor: pkElementArray){ if (!(accessor instanceof KeyIsElementAccessor)){ return false; } if (!accessor.getMapping().isMultitenantPrimaryKeyMapping()){ if (foundFirstElement){ return false; } foundFirstElement = true; } } return true; }
/** * INTERNAL: Create an instance of the composite primary key class for the * key object. */ @Deprecated //replaced by method below but may still be used by older clients. public Object createPrimaryKeyInstance(Vector key) { KeyElementAccessor[] pkElementArray = this.getKeyClassFields(getPKClass()); if (pkElementArray.length == 1 && pkElementArray[0] instanceof KeyIsElementAccessor) { return key.get(0); } Object keyInstance = getPKClassInstance(); for (int index = 0; index < pkElementArray.length; index++) { KeyElementAccessor accessor = pkElementArray[index]; Object fieldValue = key.get(index); accessor.setValue(keyInstance, fieldValue); } return keyInstance; }