Un interblocage renvoie l'erreur 1213 que vous devez traiter côté client
Notez qu'un interblocage et une attente de verrouillage sont des choses différentes. Dans une impasse, il n'y a pas de transaction « ratée » :ils sont tous les deux coupables. Il n'y a aucune garantie de savoir lequel sera annulé.
Vous devez utiliser rollback
, votre code de style insérera un doublon. par exemple vous devriez :
$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++;
}
}
J'espère que cette aide.