Правильный генератор Hibernate ID для Postgres Serial / BigSerial Column?
-
26-09-2019 - |
Вопрос
Мои столы PostgreSQL имеют идентификатор типа bigserial
, что означает, что они генерируются в установленные строки времени (и, таким образом, значение ID столбца не поставляется в INSERT
утверждение). Мне трудно найти правильное значение для <generator class="...">
Атрибут в моем файле отображения XML.
Код ниже - ближайший, который я обнаружил, что, кажется, ближе всего к Postgres, но он все еще выполняет SELECT nextval(...)
на последовательности перед вставкой (и явно включающей значение поля ID на вставке). Я просто хочу, чтобы скрыть не включать значение идентификатора поля вообще, позволяя Postgres выполнять свою работу по созданию самой ценности.
<id name="id" column="id" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">my_sequence_name</param>
</generator>
</id>
Другие советы
От того, что я читаю:
<id name="id" column="id" type="java.lang.Long">
<generator class="sequence">
<param name="sequence">my_sequence_name</param>
</generator>
</id>
должен работать быстрее, чем:
<id name="id" column="id" type="java.lang.Long">
<generator class="identity" />
</id>
Генератор последовательности падает в Не вставляет генераторы POID описано так:
Не вставляет генераторы POID - лучший вариант для новых приложений. Эти генераторы позволяют Nibernate назначать личность постоянному объекту без написания данных объекта в THEDatabase, что позволяет Nibernate для задержки записи, пока деловая транзакция не будет завершена, уменьшая круглые поездки в базу данных.
Хотя генератор идентификатора После вставки генераторы PoID группа:
Post-INSERT POID Generators требуют, чтобы данные были сохранены в базу данных для создания идентификатора. Это изменяет поведение Nhibernate в очень тонких способах и отключает некоторые функции производительности. Таким образом, использование этих генераторов POID сильно обескуражено! Они должны использоваться только с существующими базами данных, где другие приложения полагаются на это поведение.
Цитаты были взяты из Nhibernate 3.0 поваренной книги.
Пробовал следовать, и это сработало:
<id name="id" column="id" type="long" unsaved-value="null" >
<generator class="sequence">
<param name="sequence">my_sequence_name</param>
</generator>
</id>