protected function pushCache(&$entity, $className) {
    if (!isset($entity->guid)) {
      return;
    }
    // Increment the entity access count.
    if (!isset($this->entityCount[$entity->guid])) {
      $this->entityCount[$entity->guid] = 0;
    }
    $this->entityCount[$entity->guid]++;
    // Check the threshold.
    if ($this->entityCount[$entity->guid] < $this->config['cache_threshold']) {
      return;
    }
    // Cache the entity.
    if ((array) $this->entityCache[$entity->guid] ===
        $this->entityCache[$entity->guid]) {
      $this->entityCache[$entity->guid][$className] = clone $entity;
    } else {
      while ($this->config['cache_limit']
          && count($this->entityCache) >= $this->config['cache_limit']) {
        // Find which entity has been accessed the least.
        asort($this->entityCount);
        foreach ($this->entityCount as $key => $val) {
          if (isset($this->entityCache[$key])) {
            break;
          }
        }
        // Remove it.
        if (isset($this->entityCache[$key])) {
          unset($this->entityCache[$key]);
        }
      }
      $this->entityCache[$entity->guid] = [$className => (clone $entity)];
    }
    $this->entityCache[$entity->guid][$className]->clearCache();
  }