protected function buildIdentificationCriteria(array $subject)
    {
        $criteria = [];

        foreach ($this->identificationFields as $dbField => $subjectField) {
            if (empty($subject[$subjectField])) {
                throw new \InvalidArgumentException(sprintf('Subject must contain a(n) "%s" field', $subjectField));
            }

            if (is_numeric($dbField)) {
                $dbField = $subjectField;
            }

            $criteria[$dbField] = $subject[$subjectField];
        }

        return $criteria;
    }