originalManager = $em; // Make sure, wrapInTransaction() exists on the EM. // To be removed when dropping support for ORM 2 $this->em = $em instanceof EntityManager || $em instanceof EntityManagerDecorator ? $em : new class ($em) extends EntityManagerDecorator { }; if ($purger !== null) { $this->purger = $purger; $this->purger->setEntityManager($em); } parent::__construct($em); $this->listener = new ORMReferenceListener($this->referenceRepository); $em->getEventManager()->addEventSubscriber($this->listener); } /** * Retrieve the EntityManagerInterface instance this executor instance is using. * * @return EntityManagerInterface */ public function getObjectManager() { return $this->originalManager; } /** @inheritDoc */ public function setReferenceRepository(ReferenceRepository $referenceRepository) { $this->em->getEventManager()->removeEventListener( $this->listener->getSubscribedEvents(), $this->listener ); parent::setReferenceRepository($referenceRepository); $this->listener = new ORMReferenceListener($this->referenceRepository); $this->em->getEventManager()->addEventSubscriber($this->listener); } }