Zakleszczenie zwraca błąd 1213, który należy przetworzyć po stronie klienta
Zauważ, że zakleszczenie i oczekiwanie na blokadę to dwie różne rzeczy. W impasie nie ma transakcji „nieudanej”:obaj są winni. Nie ma gwarancji, który z nich zostanie wycofany.
Musisz użyć rollback
, Twój kod stylu wstawi duplikat. na przykład powinieneś:
$retry = 0;
$done = false;
$this->entityManager->getConnection()->beginTransaction(); // suspend auto-commit
while (!$done and $retry < 3) {
try {
$this->entityManager->flush();
$this->entityManager->getConnection()->commit(); // commit if succesfull
$done = true;
} catch (\Exception $e) {
$this->entityManager->getConnection()->rollback(); // transaction marked for rollback only
$retry++;
}
}
Mam nadzieję, że ta pomoc.