Класс генерации гибернации

#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 о классах генератора здесь.