我的问题 - 处理尝试更改已更改的实体并使用最新的版本ID。当我在我的代码在UnitOfWork的commit()上升OptimisticLockException中执行flush()并通过catch-all块捕获相同的地方时。并在这个捕获主义关闭EntityManager。 如果我想跳过这个实体,并继续从ArrayCollection另一个,我不应该使用flush()?如何在发生OptimisticLockException时避免关闭EntityManager?
尝试重建的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());
,然后做的flush()我得到OptimisticLockException和关闭实体管理器。 如果我做
$this->getContainer()->get('doctrine')->resetManager();
$em = $doctrine->getManager();
未注册的这个实体管理器中的旧数据,我甚至不能写在数据库日志,我得到错误:
[Symfony\Component\Debug\Exception\ContextErrorException]
Notice: Undefined index: 00000000514cef3c000000002ff4781e
还是必须在我的代码重新打开的EntityManager在catch块的例子吗? – Hayate