/**
* Retrieve an entity, throwing a NotFoundException if the entity is not found
*
* @param string $class_name
* @param string $id
* @param bool $use_cache
* @return object
*/
public function retrieve($class_name, $id, $use_cache = true)
{
$this->validateId($id);
if ($use_cache && $this->cache->exists($class_name, $id)) {
return $this->cache->retrieve($class_name, $id);
}
$metadata = $this->mapper->getEntityMetadata($class_name);
$serialised_data = $this->driver->retrieve($this->key_scheme->getEntityKey($metadata->getTableName(), $id));
$writer = new Writer($metadata, $serialised_data, $this);
$entity = $writer->getProxy();
$this->cache->store($class_name, $id, $entity);
return $entity;
}