由于postRemove
事件处理程序中的异常,删除实体失败。即使捕获了异常,删除也会失败,因为事务无法再提交。 如何解决这个问题?
完整的故事:
我需要在基于Symfony 3.4
和Doctrine
的Web服务中跟踪一些已删除的实体。
为此,我创建了一个EventSubscriber
来处理postRemove
事件,以检查是否需要记录已删除的实体。在这种情况下,实体的UUID存储在DB的DeleteLog
表中。
这很好用,但在某些罕见情况下,持久化DeleteLogEntry
失败,因为给定UUID的日志条目已经存在,需要是唯一的。
这个问题的根源是一些我无法自行更改的第三方代码。作为临时解决方案,我试图捕获UniqueConstraintViolationException
。这并不能解决问题,因为现在我得到了ConnectionException
事务提交失败,因为事务已被标记为仅回滚。
有可能解决这个困境吗?
当然,我可以在创建新实体之前检查给定UUID的DeleteLogEntry
是否存在。但由于这个问题只在罕见情况下发生,大多数时候检查会是负面的。当然,运行检查并不会对性能产生灾难性影响,但似乎并不是最好的解决方案。
有没有办法捕获异常并防止事务被标记为仅回滚?