Можно ли использовать JPA-контроль версий / оптимистическую блокировку, чтобы предотвратить передачу старых данных для изменения?

Я хочу предотвратить следующий сценарий:

  • Пользователь 1 открывает веб-страницу, которая позволяет ему изменять некоторые данные
  • Пользователь 2 открывает веб-страницу, которая позволяет ему изменять те же данные
  • Пользователь 2 изменяет и сохраняет данные
  • Пользователь 1 пытается изменить и сохранить данные (необходимо предотвратить это)

В настоящее время мы используем оптимистическую блокировку JPA, которая дает нашему Entity номер версии. Было бы плохой практикой использовать этот атрибут версии в нашей бизнес-логике, чтобы предотвратить изменение?

Дополнительный вопрос: если можно использовать атрибут version, было бы плохой практикой просто допустить возникновение OptimisticLockException, чтобы модификация не удалась? Или это просто лень?

1 ответ

Решение

По сути, это и есть оптимистическая блокировка. Управление версиями дает вам некоторые очевидные дополнительные преимущества.

Можете ли вы просто положиться на OptimisticLockException зависит от вашего приложения. Если вы выполняете много операций до того, как сохранение, возможно, не удастся выполнить, возможно, имеет смысл проверить заранее, т. Е. Быстро выполнить отказ (хотя в конце все равно может произойти сбой).

В более простых случаях нет причин, по которым вы не могли бы просто подождать, пока не сгенерируется исключение, так как вам все равно придется с ним справиться.

Другие вопросы по тегам