我的問題 - 處理嘗試更改已更改的實體並使用最新的版本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