Un deadlock restituisce l'errore 1213 che dovresti elaborare sul lato client
Si noti che un deadlock e un'attesa di blocco sono cose diverse. In una situazione di stallo, non c'è transazione "fallita":entrambi sono colpevoli. Non vi è alcuna garanzia di quale verrà annullato.
Devi utilizzare rollback
, il tuo codice di stile inserirà un duplicato. per esempio dovresti:
$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++;
}
}
Spero che questo aiuti.