Это пример использования при регистрации пользователей через веб-приложение / веб-сервис. У нас есть сложный алгоритм проверки дубликата участника путем просмотра нескольких таблиц, таких как телефон, адрес и т. Д. Алгоритм варьируется в зависимости от страны участника. Таким образом, это ограничение не может быть реализовано с использованием ограничения первичного ключа / уникального ключа.
Итак, у нас есть проверки в коде Java. Но если есть 2 дублирующих одновременных запроса, 2 потока Java видят, что элемент не существует, и они оба вставляют запись, что приводит к дублированию. Как я могу предотвратить такие дубликаты вставок?
Я могу предотвратить обновления, используя блокировки на уровне строк или оптимистичный параллелизм Hibernate. Я могу думать о блокировках на уровне таблицы, чтобы предотвратить такие вставки, но ограничивает производительность приложения, так как он также блокирует обновления. Я думаю, что другой вариант - создать таблицу блокировок с записью с id = 'memberInsert' и заставить все вставки через JDBC получить блокировку на уровне строк для этой записи.
Спасибо
Suneel