NHibernate - сопоставление идентификатора с идентификатором DB2 - PullRequest
1 голос
/ 12 февраля 2009

Я новичок в NHibernate и пытаюсь подключиться к таблице DB2 через провайдера ISeries. Таблица имеет первичный ключ BIGINT, который автоматически генерируется как личность. Я пробовал несколько значений для свойства генератора идентификатора в моем файле отображения, но не увенчался успехом. Таблица def выглядит так (имена полей изменены):

CREATE TABLE SCHEMA/TABLE (
    PKID BIGINT GENERATED ALWAYS AS IDENTITY (
        START WITH 1 INCREMENT BY 1
        NO MINVALUE NO MAXVALUE
        NO CYCLE NO ORDER
        CACHE 20)
    ,
    SOMESTRING VARCHAR(50) CCSID 37 DEFAULT NULL,
    FIRSTFK BIGINT NOT NULL,
    SECONDFK BIGINT DEFAULT NULL,
    ANOTHERSTRING VARCHAR(100) CCSID 37 DEFAULT NULL,
    CONSTRAINT NISDEV/PK_TABLE PRIMARY KEY (PKID));

Файл сопоставления выглядит следующим образом:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Project.Domain.Thing, Project" table="TABLE">
    <id name="ID" column="PKID" type="Int64">
      <generator class="**???????**" />
    </id>
    <property name="SomeString" column="SOMESTRING" />
    <property name="FirstFK" column="FIRSTFK"/>
    <property name="SecondFK" column="SECONDFK"/>
    <property name="AnotherString" column="ANOTHERSTRING"/>
  </class>
</hibernate-mapping> 

Сначала у меня был установлен класс генератора "native", который, согласно документации 1008 *, выбирает "идентичность" для DB2. При использовании «native» или «identity» я получаю «значения NULL, недопустимые в столбце PKID» и другие различные ошибки, когда я изменяю класс генератора на различные другие значения.

Я уверен, что в документации мне чего-то не хватает, но есть ли способ заставить NHibernate подобрать следующее значение первичного ключа, являющегося GENERATED IDENTITY в DB2, и обработать его для меня когда я вызываю Save ()? Нужно ли где-нибудь написать выборку, которую NHibernate может использовать для получения следующего значения?

Заранее спасибо.

1 Ответ

1 голос
/ 12 февраля 2009

Я понял это, поэтому, если кто-то будет делать подобные вещи в будущем и столкнется с той же проблемой, вот что это было.

Я использовал учебник из NHibernate FAQ и адаптировал его к ISeries. После этого я не стал пропускать часть, которая фактически создает схему. Я создал все свои таблицы уже в среде ISeries DB2, поэтому я не должен был делать это для моих тестовых прогонов:

<NUnit.Framework.SetUp()> _
Public Sub SetupContext()
     Dim schemaExport As New NHibernate.Tool.hbm2ddl.SchemaExport(_configuration)
     schemaExport.Execute(False, True, False, False)
End Sub

Тем более, что у меня неправильно настроен файл сопоставления для поля идентификатора с классом генератора «назначен». Когда я посмотрел определение таблицы и понял, что NHibernate перезаписал атрибут GENERATED IDENTITY поля первичного ключа PKID при вызове SchemaExport.Execute (), я просто заново создал таблицу с правильными атрибутами, изменил класс генератора на «identity, "убрал вызов SchemaExport, и теперь все работает отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...