Hibernate - извлекает последовательный номер из базы данных, предотвращая дублирование ключей во время параллелизма - PullRequest
0 голосов
/ 04 января 2019

У меня возникла ситуация с обслуживанием устаревшего проекта с использованием JSF / Primefaces / Hibernate, база данных - DB2, исходный код был перенесен из Delphi в Java, но структура базы данных сохранена, поскольку она поступила от поставщика (мы не можем Измени это). Есть несколько таблиц, используемых для получения последовательного идентификатора ( SELECT MAX и UPDATE после этого).

Структура таблицы имеет составной ключ (год и число), сегодня проблема заключается в следующем: мы выбираем максимальное число на основе года из таблицы параметров (которая содержит значение «следующий последовательный»). Иногда пользователи, использующие одновременно, получают один и тот же номер, вызывая ошибки при попытке сохранить дублированные ключи.

Я пытался реализовать Hibernate Interceptor для извлечения и установки значения во время метода onSave, но мне не удалось избежать проблемы с дублированными ключами (пробовал использовать его как SessionFactory-scoped) , Также я пытался синхронизировать методы, но это тоже не сработало.

Есть ли способ предотвратить эту проблему дублированного ключа (программно, без необходимости изменения базы данных) с помощью функций Hibernate?

Заранее спасибо!

...