#hibernate #jakarta-ee #jsf-2 #generator
#гибернация #джакарта-ee #jsf-2 #генератор
Вопрос:
Я использую приложение гибернации для хранения данных в базе данных Postgres, я создал файл HBM из POJO. Таблица состоит из идентификатора, который bigserial
идентично должен быть автоматически сгенерирован. но когда я запускаю проект после вставки записи, он не увеличивает значение id, следовательно, генерирует исключение:
SEVERE: ERROR: duplicate key value violates unique constraint "usertable_pkey"
SEVERE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Моя запись в HBM выглядит следующим образом:
<id name="userid" type="long">
<column name="userid" />
<generator class="assigned" />
</id>
Кто-нибудь может подсказать, какой класс генератора я могу использовать для решения этой проблемы?
Ответ №1:
При вставке транзакционных данных предпочтительнее использовать [sequence][2]
для генерации идентификатора объекта.
<id ....>
<generator class="sequence">
<param name="sequence">YOUR_SEQUENCE _NAME</param>
</generator>
</id>
это гарантирует, что даже в многопоточных средах вы получите разные идентификаторы для разных объектов.
Прочитайте API о классах генератора здесь.