Вопрос

Мои столы 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>
Это было полезно?

Решение

Это недокументировано, но вы действительно можете использовать identity Генератор с PostgreSQL Когда PK имеет тип SERIAL или BIGSERIAL:

<id name="id" column="user_id" type="java.lang.Long">
     <generator class="identity"/>
</id>

Видеть HB-875. а также HHH-1675. Для фона на этом.

Другие советы

От того, что я читаю:

<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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top