Я создаю Java приложение для перевода денег, которое в основном переводит деньги с одного счета на другой.
В двух словах, у меня есть сущность Transfer
, которая содержит 3 свойства: @ManyToOne OriginAccount
, @ManyToOne TargetAccount
и Amount
.
Учетная запись содержит баланс для корректировки в рамках перевода.
Я собираюсь использовать LockModeType.PESSIMISTIC_WRITE
для Account
сущностей, но мне нужно учесть deadlock.
Один из вариантов - выбрать список из 2 учетных записей всегда в одном порядке (сортировка по идентификатору), чтобы всегда получать блокировки в одном и том же порядке.
Я также слышал о PessimisticLockScope.EXTENDED
но каков порядок получения замков на объединенных записях? Есть ли возможность обеспечить заказ на основе своего рода компаратора? Как я могу, конечно, исключить возможность тупика?