Мне нужно создать объект подарочной карты в БД, где генерируются коды подарочных карт по алгоритму, и шансы на их столкновение довольно низки.
Еще до того, как вы вставляете объекты подарочной карты в БД, нам необходимо проверить возможности создания дубликатов подарочных карт.
Также необходимо соблюдать следующие пункты
Я использую Hibernate для операций с БД, и у меня есть следующие параметры.
Я немного смущен, какой подход должен быть предпочтительным?
Чтобы убедиться, что дубликаты не разрешены, у вас должен быть уникальный индекс и/или уникальное ограничение для столбца, используемого для хранения кодов подарочных карт.
Тем не менее, я бы порекомендовал первый вариант, потому что он более эффективен, если есть небольшие шансы на дублирование подарочных карт. Также во втором варианте, даже если вы проверяете дубликаты перед вставкой новых кодов, у вас нет гарантии, что код с таким же значением не был вставлен в БД между вашей проверкой и вставкой, так что вам также придется обрабатывать случай когда вставка вызывает исключение ограничения.
Я бы создал все, а затем проверял дублированные значения с помощью JPQL lilke:
select p from Ticket p where p.id in (:idList)
При такой "пакетной" операции вам не нужно будет совершать поездку в базу данных на каждой итерации. Это проблема вашего первого варианта.
Если вы используете somekind правила базы данных, например: ограничение или триггер, вы можете получить исключение, которое может привести к откату транзакции.