Моя проблема - попробуйте изменить сущность, которая уже изменилась и имеет новый идентификатор версии. Когда я делаю flush() в моем коде в commit(), повышающем OptimistLockException UnitOfWork и перехватывая в том же месте блоком catch-all. И в этой доктрине catch, закрывающей EntityManager. Если я хочу пропустить эту сущность и продолжить с другой из ArrayCollection, я не должен использовать flush()?Как избежать закрытия EntityManager при возникновении исключения OptimisticLockException?
Попробуйте обновить EntityManager:
}catch (OptimisticLockException $e){
$this->em = $this->container->get('doctrine')->getManager();
echo "\n||OptimisticLockException.";
continue;
}
И еще получить
[Doctrine\ORM\ORMException]
The EntityManager is closed.
Странно.
Если я сделать
$this->em->lock($entity, LockMode::OPTIMISTIC, $entity->getVersion());
, а затем сделать флеш() я получаю OptimisticLockException и закрытого менеджера объекта. если я сделать
$this->getContainer()->get('doctrine')->resetManager();
$em = $doctrine->getManager();
Старых данные незарегистрированного с этим менеджером сущности и я даже не могу писать журналы в базе данных, я получаю ошибку:
[Symfony\Component\Debug\Exception\ContextErrorException]
Notice: Undefined index: 00000000514cef3c000000002ff4781e
Или я должен заново EntityManager в блоке поймать в моем коде? – Hayate