Um impasse retorna o erro 1213 que você deve processar no lado do cliente
Observe que um impasse e uma espera de bloqueio são coisas diferentes. Em um impasse, não há transação "falhou":ambos são culpados. Não há garantia de qual deles será revertido.
Você deve usar
rollback
, seu código de estilo inserirá duplicata. por exemplo, você deve:$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++;
}
}
Espero que esta ajuda.