Как обрабатывать многопоточные вставки с уникальным ограничением в базе данных, используя JPA/Hibernate?
В бине, управляемом сообщениями, я сохраняю записи в таблице поиска с уникальными записями. По сути, я создаю оператор выбора с критериями API, и если я не нахожу запись, я создаю ее.
В настоящее время этот код работает на ошибки MySQL, потому что в некоторых случаях это создание записи (em.persist(entry)
) будет нарушать уникальное ограничение на мою базу данных. другой экземпляр моего mdb создал запись для поиска после того, как я ее не нашел и до того, как смог ее создать.
Как я могу справиться с этой проблемой синхронизации, так что все еще есть только одна запись?
1 ответ
Вам необходимо использовать SELECT FOR UPDATE или по-разному гарантировать уникальность (например, генерировать уникальную часть записи внутри Java).
Hibernate поддерживает пессимистичные блокировки, которые, как я полагаю, являются еще одним названием для той же вещи.