public function testInvalidateEntityQueries()
 {
     $key = 'test';
     // cache a result and class
     $this->cache->registerQueryResult($this->entity, $key);
     $this->cache->registerQueryForEntity($this->entity, $key);
     // expire the entity queries: class key should be removed, entity key not
     $this->cache->invalidateEntityQueries($this->entity);
     $this->assertContains($key, $this->cache->getRegisteredKeys($this->entityCacheKey));
     $this->assertNotContains($key, $this->cache->getRegisteredKeys($this->entityCacheClass));
 }
 /**
  * @param Query       $query
  * @param int|null    $ttl
  * @param string|null $key
  *
  * @return array
  */
 public function query(Query $query, $ttl = null, $key = null)
 {
     if (is_null($key)) {
         $key = $this->getQueryCacheKey($query);
     }
     if ($ttl !== false) {
         $query->useResultCache(true, $ttl, $key);
     }
     $hasKey = $this->cache->has($key);
     // load via entitymanager
     $res = $query->getResult();
     // remember which queries contain these entities
     if (!empty($res) && $hasKey === false && $ttl !== false) {
         $this->cache->registerQueryForEntity($res[0], $key);
         foreach ($res as $entity) {
             $this->cache->registerQueryResult($entity, $key);
         }
     }
     return $res;
 }