Doctrine2死锁 - 如何处理

Ren*_*gen 9 mysql deadlock doctrine-orm

在我正在研究的symfony2项目中,有时在调用flush我的实体管理器时会发生死锁.这导致例外.大多数情况下,此错误只发生一次,第二次尝试插入相同的数据正常工作.

有没有一种好方法可以再次执行(刷新)同一个事务.很简单

$em->flush();
Run Code Online (Sandbox Code Playgroud)

不会这样做,因为如果发生错误,实体经理会被关闭.

我发现https://github.com/doctrine/doctrine2/pull/806位没有提供解决方案.

Rya*_*yan 0

我会使用显式事务划分,希望能够从一开始就防止死锁。默认情况下仅flush()包含在事务中。

或者,您可以更改过程以使用 DQLUPDATE查询,该查询应该是原子的。

或者将请求重新提交回操作(有一些递归限制)。

我不确定是否有一种重新启动实体管理器但保留工作单元的好方法。