protected void initializeSourceForeignKeysToTargetKeys() throws DescriptorException { // Since we require a custom selection query, these keys are optional. if (getSourceForeignKeyFields().size() != getTargetForeignKeyFields().size()) { throw DescriptorException.sizeMismatchOfForeignKeys(this); } for (int i = 0; i < getTargetForeignKeyFields().size(); i++) { DatabaseField field = getReferenceDescriptor().buildField((DatabaseField)getTargetForeignKeyFields().get(i)); getTargetForeignKeyFields().set(i, field); } for (int i = 0; i < getSourceForeignKeyFields().size(); i++) { DatabaseField field = getReferenceDescriptor().buildField((DatabaseField)getSourceForeignKeyFields().get(i)); getSourceForeignKeyFields().set(i, field); getSourceForeignKeysToTargetKeys().put(field, getTargetForeignKeyFields().get(i)); } }
protected void initializeSourceForeignKeysToTargetKeys() throws DescriptorException { // Since we require a custom selection query, these keys are optional. if (getSourceForeignKeyFields().size() != getTargetForeignKeyFields().size()) { throw DescriptorException.sizeMismatchOfForeignKeys(this); } for (int i = 0; i < getTargetForeignKeyFields().size(); i++) { DatabaseField field = getReferenceDescriptor().buildField(getTargetForeignKeyFields().get(i)); getTargetForeignKeyFields().set(i, field); } for (int i = 0; i < getSourceForeignKeyFields().size(); i++) { DatabaseField field = getDescriptor().buildField(getSourceForeignKeyFields().get(i)); getSourceForeignKeyFields().set(i, field); getSourceForeignKeysToTargetKeys().put(field, getTargetForeignKeyFields().get(i)); } }
protected void initializeSourceForeignKeysToTargetKeys() throws DescriptorException { // Since we require a custom selection query, these keys are optional. if (getSourceForeignKeyFields().size() != getTargetForeignKeyFields().size()) { throw DescriptorException.sizeMismatchOfForeignKeys(this); } for (int i = 0; i < getTargetForeignKeyFields().size(); i++) { DatabaseField field = getReferenceDescriptor().buildField(getTargetForeignKeyFields().get(i)); getTargetForeignKeyFields().set(i, field); } for (int i = 0; i < getSourceForeignKeyFields().size(); i++) { DatabaseField field = getDescriptor().buildField(getSourceForeignKeyFields().get(i)); getSourceForeignKeyFields().set(i, field); getSourceForeignKeysToTargetKeys().put(field, getTargetForeignKeyFields().get(i)); } }
/** * INTERNAL: * Compare the non-null elements and return true if they are alike. */ public boolean compareElements(Object element1, Object element2, AbstractSession session) { if (!isForeignKeyRelationship()) { return false; } Object primaryKey1 = getReferenceDescriptor().getObjectBuilder().extractPrimaryKeyFromObject(element1, session); Object primaryKey2 = getReferenceDescriptor().getObjectBuilder().extractPrimaryKeyFromObject(element2, session); if (!primaryKey1.equals(primaryKey2)) { return false; } if (this.isPrivateOwned()) { return session.compareObjects(element1, element2); } else { return true; } }
/** * INTERNAL: * Compare the non-null elements and return true if they are alike. */ public boolean compareElements(Object element1, Object element2, AbstractSession session) { if (!isForeignKeyRelationship()) { return false; } Object primaryKey1 = getReferenceDescriptor().getObjectBuilder().extractPrimaryKeyFromObject(element1, session); Object primaryKey2 = getReferenceDescriptor().getObjectBuilder().extractPrimaryKeyFromObject(element2, session); if (!primaryKey1.equals(primaryKey2)) { return false; } if (this.isPrivateOwned()) { return session.compareObjects(element1, element2); } else { return true; } }
/** * Return whether the reference objects must be deleted * one by one, as opposed to with a single DELETE statement. */ protected boolean mustDeleteReferenceObjectsOneByOne() { ClassDescriptor referenceDescriptor = this.getReferenceDescriptor(); return referenceDescriptor.hasDependencyOnParts() || referenceDescriptor.usesOptimisticLocking() || (referenceDescriptor.hasInheritance() && referenceDescriptor.getInheritancePolicy().shouldReadSubclasses()) || referenceDescriptor.hasMultipleTables(); }
/** * INTERNAL: * Compare the non-null elements and return true if they are alike. */ public boolean compareElements(Object element1, Object element2, AbstractSession session) { if (!isForeignKeyRelationship()) { return false; } Vector primaryKey1 = this.getReferenceDescriptor().getObjectBuilder().extractPrimaryKeyFromObject(element1, session); Vector primaryKey2 = this.getReferenceDescriptor().getObjectBuilder().extractPrimaryKeyFromObject(element2, session); CacheKey cacheKey1 = new CacheKey(primaryKey1); CacheKey cacheKey2 = new CacheKey(primaryKey2); if (!cacheKey1.equals(cacheKey2)) { return false; } if (this.isPrivateOwned()) { return session.compareObjects(element1, element2); } else { return true; } }
/** * Build and return a database row that contains a foreign key for the specified reference * object. This will be stored in the nested row(s). */ protected XMLRecord extractKeyRowFromReferenceObject(Object object, AbstractSession session, XMLRecord parentRecord) { Element newNode = XPathEngine.getInstance().createUnownedElement(parentRecord.getDOM(), getForeignKeyGroupingElement()); XMLRecord result = new DOMRecord(newNode); result.setSession(session); for (int i = 0; i < this.getSourceForeignKeyFields().size(); i++) { DatabaseField fkField = (DatabaseField)getSourceForeignKeyFields().get(i); if (object == null) { result.add(fkField, null); } else { DatabaseField pkField = (DatabaseField)this.getSourceForeignKeysToTargetKeys().get(fkField); Object value = this.getReferenceDescriptor().getObjectBuilder().extractValueFromObjectForField(object, pkField, session); result.add(fkField, value); } } return result; }
List foreignKeys = new ArrayList(cp.sizeFor(attributeValue)); for (Object iter = cp.iteratorFor(attributeValue); cp.hasNext(iter);) { Object singleValue = getReferenceDescriptor().getObjectBuilder().extractValueFromObjectForField(cp.next(iter, session), pkField, session); foreignKeys.add(singleValue);
List foreignKeys = new ArrayList(cp.sizeFor(attributeValue)); for (Object iter = cp.iteratorFor(attributeValue); cp.hasNext(iter);) { Object singleValue = getReferenceDescriptor().getObjectBuilder().extractValueFromObjectForField(cp.next(iter, session), pkField, session); foreignKeys.add(singleValue);
DatabaseField pkField = (DatabaseField)getSourceForeignKeysToTargetKeys().get(singleField); for (Object iter = cp.iteratorFor(attributeValue); cp.hasNext(iter);) { Object singleValue = getReferenceDescriptor().getObjectBuilder().extractValueFromObjectForField(cp.next(iter, session), pkField, session); row.add(singleField, singleValue);