Транзакции повторяют из-за дедлоков. Это такое состояние, когда одновременно выполняются 2 транзакции и первая транзакция блокирует запись, которая нужна второй транзакции, а вторая транзакция блокирует запись, которая нужна первой транзакции. В итоге ни одна из транзакций не может завершиться. Это состояние называется deadlock. В этом случае одна из транзакций должна откатиться, чтобы другая имела возможность успешно завершиться. Так вот, эта транзакция, которую откатили попробует еще 3 раза выполниться, прежде чем окончательно вылетит с исключением.
Соответственно, да, если у вас толстые транзакции, то желательно их повторять, так как чем более жирная транзакция и чем больше выполняется одновременных транзакций в единицу времени, тем выше шанс получить deadlock.
Вообще на более продвинутом уровне принято сохранять не более одной сущности (объекта) внутри одной транзакции. Таким образом вы получаете худые транзакции и отсутствие дедлоков. Производительность вашего приложения возрастет, но вместе с тем, вы получите проблему атомарного сохранения нескольких сущностей (объектов) в рамках одной бизнес-операции как это происходит в микросервисной архитектуре. Проблему можно решить использованием шаблона saga, но в целом это уже совершенно иной уровень знаний и вникать в это наверное не стоит, если вы делаете что-то небольшое.