/**
  * Transforms a Specification into a Query
  *
  * @param Specification $specification
  * @return \Doctrine\ORM\Query
  * @throws \InvalidArgumentException
  */
 private function getQuery(Specification $specification)
 {
     if (!$specification->supports($this->getEntityName())) {
         throw new \InvalidArgumentException("Specification does not support this repository");
     }
     $qb = $this->createQueryBuilder('e');
     if ($expr = $specification->match($qb, 'e')) {
         $qb->where($expr);
     }
     $query = $qb->getQuery();
     $specification->modifyQuery($query);
     return $query;
 }
 /**
  * Modifies the query once it has been generated.
  *
  * @param \Doctrine\ORM\Query $query
  */
 public function modifyQuery(Query $query)
 {
     if ($this->specification) {
         $this->specification->modifyQuery($query);
     }
 }