DataRowPostProcessor(ClassDescriptor classDescriptor, Map<String, Collection<ColumnOverride>> columnOverrides) { if (classDescriptor != null && classDescriptor.hasSubclasses()) { this.inheritanceTree = classDescriptor.getEntityInheritanceTree(); this.columnOverrides = columnOverrides; } else { if (columnOverrides.size() != 1) { throw new IllegalArgumentException("No inheritance - there must be only one override set"); } defaultOverrides = columnOverrides.values().iterator().next(); } }
public boolean hasSubclasses() { checkDescriptorInitialized(); return descriptor.hasSubclasses(); }
private RowReader<?> createEntityRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata, EntityResultSegment resultMetadata, PostprocessorFactory postProcessorFactory) { if (queryMetadata.getPageSize() > 0) { return new IdRowReader<Object>(descriptor, queryMetadata, resultMetadata, postProcessorFactory.get()); } else if (resultMetadata.getClassDescriptor() != null && resultMetadata.getClassDescriptor().hasSubclasses()) { return new InheritanceAwareEntityRowReader(descriptor, resultMetadata, postProcessorFactory.get()); } else { return new EntityRowReader(descriptor, resultMetadata, postProcessorFactory.get()); } }
private RowReader<?> createFullRowReader(RowDescriptor descriptor, QueryMetadata queryMetadata, PostprocessorFactory postProcessorFactory) { if (queryMetadata.getPageSize() > 0) { return new IdRowReader<Object>(descriptor, queryMetadata, null, postProcessorFactory.get()); } else if (queryMetadata.getClassDescriptor() != null && queryMetadata.getClassDescriptor().hasSubclasses()) { return new InheritanceAwareRowReader(descriptor, queryMetadata, postProcessorFactory.get()); } else { return new FullRowReader(descriptor, queryMetadata, postProcessorFactory.get()); } }
ObjectResolver(DataContext context, ClassDescriptor descriptor, boolean refresh) { // sanity check if (descriptor == null || descriptor.getEntity() == null) { // possible cause: query that is not expected to have result set somehow got it.. throw new CayenneRuntimeException("No ClassDescriptor. Maybe DataRows should be fetched instead of objects."); } DbEntity dbEntity = descriptor.getEntity().getDbEntity(); if (dbEntity == null) { throw new CayenneRuntimeException("ObjEntity '%s' has no DbEntity.", descriptor.getEntity().getName()); } this.primaryKey = dbEntity.getPrimaryKeys(); if (primaryKey.size() == 0) { throw new CayenneRuntimeException("Won't be able to create ObjectId for '%s'. Reason: DbEntity " + "'%s' has no Primary Key defined.", descriptor.getEntity().getName(), dbEntity.getName()); } this.context = context; this.cache = context.getObjectStore().getDataRowCache(); this.refreshObjects = refresh; this.descriptor = descriptor; this.descriptorResolutionStrategy = descriptor.hasSubclasses() ? new InheritanceStrategy() : new NoInheritanceStrategy(); }