首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Doctrine2死锁-如何处理

Doctrine2死锁-如何处理
EN

Stack Overflow用户
提问于 2014-05-01 17:33:51
回答 2查看 2K关注 0票数 12

在我正在处理的一个symfony2项目中,当对我的entitymanager调用flush时,有时会发生死锁。这会导致异常。大多数情况下,此错误只发生一次,第二次尝试插入相同的数据是正确的。

有没有好的方法来再次执行(刷新)相同的事务。很简单

代码语言:javascript
复制
$em->flush();

不会这样做,因为如果发生错误,entitymanager将被关闭。

我发现https://github.com/doctrine/doctrine2/pull/806 bit不能提供解决方案。

EN

回答 2

Stack Overflow用户

发布于 2018-10-09 15:58:51

Doctrine为这种错误抛出了一个RetryableException,你只需再试一次就能让它工作。

问题是,在Doctrine 2中,这些异常使EntityManager不可用,您必须重新实例化一个新的。

希望这将在原则3中得到纠正:issue tracking

在Doctrine 3发布之前,我选择了一个在我公司的生产项目中通过时间测试的解决方案。所有内容都在此blog post中进行了解释

票数 1
EN

Stack Overflow用户

发布于 2017-01-05 11:26:07

我会使用explicit transaction demarcation,希望能从一开始就防止死锁。默认情况下,只有flush()封装在事务中。

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23405203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档