Tilsyneladende bruger Doctrine 2 LÅS I DELT TILSTAND med pessimistisk læselås til MySQL, hvilket ikke er det samme som VÆLG TIL OPDATERING.
Ser man på kilderne til den aktuelle stabile udgivelse, ser det ud til, at der ikke er nogen indbygget måde at gøre det på i Doctrine (jeg er ikke sikker på, hvorfor Doctrine-teamet valgte den type lås til MySQL).
Jeg brugte native SQL som løsning, som kan kortlægges til de traditionelle entiteter, som det ville være med 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();
Opdater
Som Benjamin har påpeget, er PESSIMISTIC_WRITE, hvad du leder efter.
Med 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);
Uden DQL
<?php
$entity = $em->find('Application\Model\Entity\MyEntity', $id, \Doctrine\DBAL\LockMode::PESSIMISTIC_WRITE);
Du skal også bruge erklæringen i en transaktion for at få den til at fungere.