private function doRefresh($document, array &$visited)
{
$oid = spl_object_hash($document);
if (isset($visited[$oid])) {
return;
// Prevent infinite recursion
}
$visited[$oid] = $document;
// mark visited
$class = $this->dm->getClassMetadata(get_class($document));
if (!$class->isEmbeddedDocument) {
if ($this->getDocumentState($document) == self::STATE_MANAGED) {
$id = $class->getDatabaseIdentifierValue($this->documentIdentifiers[$oid]);
$this->getDocumentPersister($class->name)->refresh($id, $document);
} else {
throw new \InvalidArgumentException('Document is not MANAGED.');
}
}
$this->cascadeRefresh($document, $visited);
}