Очевидно Doctrine 2 използва ЗАКЛЮЧВАНЕ В СПОДЕЛЕН РЕЖИМ с песимистично заключване на четене за MySQL, което не е същото като SELECT FOR UPDATE.
Разглеждайки източниците на текущата стабилна версия, изглежда, че няма естествен начин за това в Doctrine (не съм сигурен защо екипът на Doctrine избра този тип заключване за MySQL).
Използвах роден SQL като заобиколно решение, което може да бъде съпоставено с традиционните обекти, както би било с DQL:
<?php
$rsm = new ResultSetMappingBuilder($this->_em);
$rsm->addRootEntityFromClassMetadata('Model_Record_Delivery', 'u');
$query = $this->_em->createNativeQuery("SELECT * FROM delivery WHERE id = :id FOR UPDATE", $rsm);
$query->setParameter("id", $id);
$result = $query->getOneOrNullResult();
Актуализиране
Както Бенджамин посочи, PESSIMISTIC_WRITE е това, което търсите.
С DQL
<?php
$query = $this->em->createQuery('SELECT e
FROM Application\Model\Entity\MyEntity e
WHERE e = :id');
$query->setParameter("id", $id);
$query->setLockMode(\Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE);
Без DQL
<?php
$entity = $em->find('Application\Model\Entity\MyEntity', $id, \Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE);
Освен това трябва да използвате изявлението в транзакция, за да го накарате да работи.