private function persistNew(ClassMetadata $class, $document)
{
$this->lifecycleEventManager->prePersist($class, $document);
$oid = spl_object_hash($document);
$upsert = false;
if ($class->identifier) {
$idValue = $class->getIdentifierValue($document);
$upsert = !$class->isEmbeddedDocument && $idValue !== null;
if ($class->generatorType === ClassMetadata::GENERATOR_TYPE_NONE && $idValue === null) {
throw new \InvalidArgumentException(sprintf('%s uses NONE identifier generation strategy but no identifier was provided when persisting.', get_class($document)));
}
if ($class->generatorType === ClassMetadata::GENERATOR_TYPE_AUTO && $idValue !== null && !\MongoId::isValid($idValue)) {
throw new \InvalidArgumentException(sprintf('%s uses AUTO identifier generation strategy but provided identifier is not valid MongoId.', get_class($document)));
}
if ($class->generatorType !== ClassMetadata::GENERATOR_TYPE_NONE && $idValue === null) {
$idValue = $class->idGenerator->generate($this->dm, $document);
$idValue = $class->getPHPIdentifierValue($class->getDatabaseIdentifierValue($idValue));
$class->setIdentifierValue($document, $idValue);
}
$this->documentIdentifiers[$oid] = $idValue;
} else {
// this is for embedded documents without identifiers
$this->documentIdentifiers[$oid] = $oid;
}
$this->documentStates[$oid] = self::STATE_MANAGED;
if ($upsert) {
$this->scheduleForUpsert($class, $document);
} else {
$this->scheduleForInsert($class, $document);
}
}