Как избежать взаимоблокировок в PessimisticLockScope.EXTENDED? - PullRequest
1 голос
/ 28 февраля 2020

Я создаю Java приложение для перевода денег, которое в основном переводит деньги с одного счета на другой.

В двух словах, у меня есть сущность Transfer, которая содержит 3 свойства: @ManyToOne OriginAccount, @ManyToOne TargetAccount и Amount.

Учетная запись содержит баланс для корректировки в рамках перевода.

Я собираюсь использовать LockModeType.PESSIMISTIC_WRITE для Account сущностей, но мне нужно учесть deadlock.

Один из вариантов - выбрать список из 2 учетных записей всегда в одном порядке (сортировка по идентификатору), чтобы всегда получать блокировки в одном и том же порядке.

Я также слышал о PessimisticLockScope.EXTENDED но каков порядок получения замков на объединенных записях? Есть ли возможность обеспечить заказ на основе своего рода компаратора? Как я могу, конечно, исключить возможность тупика?

...