public function findQuery($typeKey, array $criteria, array $fields = [], array $sort = [], $offset = 0, $limit = 0)
    {
        $metadata = $this->getMetadataForType($typeKey);
        $persister = $this->getPersisterFor($typeKey);
        $this->dispatcher->dispatch(Events::preQuery, new PreQueryArguments($metadata, $this, $persister, $criteria));

        $recordSet = $persister->query($metadata, $this, $criteria, $fields, $sort, $offset, $limit);

        $models = $this->loadModels($typeKey, $recordSet);
        return new Collections\Collection($metadata, $this, $models, $recordSet->totalCount());
    }