/**
  * @param IStorable $storable
  *
  * @return IStorable
  * @throws StorageException
  */
 public function load(IStorable $storable)
 {
     if ($this->hasStorable($guid = $storable->guid())) {
         return $this->storable($guid);
     }
     $selectQuery = new SelectQuery();
     $guid = $storable->guid();
     $selectQuery->select(new AsteriskFragment())->from(new SelectTable($storable->schema()->getName()))->where($this->whereIdentifier($guid));
     if (($one = $this->select($selectQuery, $storable)->storable()) === null) {
         throw new StorageException(sprintf('Storable [%s (%s)] not found by given guid [%s].', get_class($storable), $storable->schema()->getName(), $guid));
     }
     $this->register($one);
     return $one;
 }