public function transaction($lockMode, $transaction)
{
$lock = $this->getLockString($lockMode);
$unlock = $this->getUnlockString();
return $this->getRepository()->transaction(function (EntityManager $em, Repository $repository) use($lock, $unlock, $transaction) {
$conn = $em->getConnection();
$conn->executeQuery($lock);
try {
$result = $repository->transaction($transaction);
$conn->executeQuery($unlock);
return $result;
} catch (Exception $e) {
// Transaction rollback does not release table locks
$conn->executeQuery($unlock);
throw $e;
}
});
}