public function persist($entity, $ttl = null)
{
$metadata = $this->mapper->getEntityMetadata(Reader::getEntityClassName($entity));
$serialiser = $this->getSerialiserMap()->getDefaultSerialiser();
$reader = new Reader($metadata, $entity);
$id = $reader->getId();
$this->validateId($id);
if ($ttl) {
$this->driver->debugLog("Caching " . $metadata->getTableName() . ' ' . $id . ' (TTL: ' . $ttl . ')');
} else {
$this->driver->debugLog("Persisting " . $metadata->getTableName() . ' ' . $id);
}
$this->driver->persist($this->key_scheme->getEntityKey($metadata->getTableName(), $id), $serialiser->serialise($metadata, $entity), $ttl);
$this->getRelationshipManager()->persistRelationships($entity, $metadata, $reader, $id);
$this->getIndexManager()->persistIndices($entity, $metadata, $reader, $id);
$this->getQueryManager()->persistTableQueries($entity, $metadata, $reader, $id);
if ($entity instanceof OrmProxyInterface) {
$entity->setEntityPersisted($id);
}
return $this->getProxy();
}