1

私はNHibernateに慣れていないので、ISeriesプロバイダーを介してDB2テーブルに接続しようとしています。テーブルには、ID として自動生成される BIGINT 主キーがあります。マッピング ファイルの id の generator プロパティにいくつかの値を試しましたが、成功しませんでした。テーブル定義は次のようになります (フィールド名が変更されています)。

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> 

最初に、ジェネレーター クラスを「ネイティブ」に設定しました。これは、ドキュメントによると、 DB2 の「ID」を選択します。「ネイティブ」または「ID」を使用すると、ジェネレーター クラスを他のさまざまな値に変更すると、「列 PKID で許可されていない Null 値」やその他のさまざまなエラーが発生します。

ドキュメントに欠けている小さなものがあると確信していますが、DB2 の GENERATED IDENTITY である主キーの次の値を NHibernate に取得させ、呼び出し時にそれを処理させる方法はありますか?保存()?NHibernate が次の値を取得するために使用できる select をどこかに書く必要がありますか?

前もって感謝します。

4

1 に答える 1

1

私はこれを理解したので、誰かが将来この種のことを行い、同じ問題に遭遇した場合、これがそれでした.

NHibernate FAQのチュートリアルを使用して、それを ISeries に適合させていました。T に続いて、実際にスキーマを作成する部分をスキップするのを怠りました。すべてのテーブルは 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

特に、「割り当て済み」のジェネレーター クラスを使用して、ID フィールドに対してマッピング ファイルを正しく設定していなかったためです。テーブル定義を見て、SchemaExport.Execute() が呼び出されたときに NHibernate が主キー フィールド PKID の GENERATED IDENTITY 属性を上書きしたことに気付いたので、正しい属性でテーブルを再作成し、ジェネレーター クラスを「identity、 " SchemaExport 呼び出しが削除され、すべてが完全に機能するようになりました。

于 2009-02-12T16:09:32.970 に答える