如何在Symfony中使用EntityValueResolver获取实体时设置PESSIMISTIC_WRITE锁模式
在Symfony中为MapEntity设置悲观写锁(PESSIMISTIC_WRITE)
要给通过#[MapEntity]自动注入的实体设置PESSIMISTIC_WRITE锁模式,只需在注解中添加options配置,传入对应的锁常量即可,具体操作如下:
- 先引入包含锁模式常量的命名空间:
use Doctrine\ORM\EntityManagerInterface; use Symfony\Bridge\Doctrine\Attribute\MapEntity;
- 修改控制器方法的
#[MapEntity]注解,通过options参数指定锁模式:
#[Route('/product/{id}')] public function show( #[MapEntity(options: ['lockMode' => EntityManagerInterface::LOCK_PESSIMISTIC_WRITE])] Product $product ): Response { // 此时$product已被施加悲观写锁,可安全执行后续操作 // ... }
补充说明
Symfony的EntityValueResolver解析实体时,会读取options里的lockMode配置,在调用Doctrine的EntityManager::find()方法时传入该锁模式,从而在数据库层面为目标数据行施加悲观写锁——其他事务无法修改该实体,直到当前事务提交或回滚。
内容的提问来源于stack exchange,提问作者FabioFLX
相关产品推荐
相关产品推荐

