質問

私のpostgreSQLテーブルにはタイプのIDがあります bigserial, 、つまり、行が挿入された時に生成されます(したがって、ID列の値はで提供されません INSERT 声明)。適切な価値を見つけるのが困難です <generator class="..."> XMLマッピングファイルの属性。

以下のコードは、私が見つけた中で最も近いことですが、それはPostgresに最も近いと思われますが、それでも実行中です SELECT nextval(...) 挿入する前のシーケンスで(およびIDフィールドの値を挿入に明示的に含める)。 HibernateにIDフィールド値をまったく含めないようにしたいだけで、Postgresが値自体を生成する仕事をすることができます。

    <id name="id" column="id" type="java.lang.Long">
        <generator class="sequence">
            <param name="sequence">my_sequence_name</param>
        </generator>
    </id>
役に立ちましたか?

解決

これは文書化されていませんが、実際には使用できます identity PKがタイプの場合、PostgreSQLを備えたジェネレーター SERIAL また BIGSERIAL:

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

見る HB-875HHH-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>

シーケンスジェネレーターはに落ちます 非挿入ポイドジェネレーター このように説明されています:

非Insert Poidジェネレーターは、新しいアプリケーションに最適なオプションです。これらのジェネレーターにより、NhibernateはオブジェクトのデータをTheDatabaseに書き込むことなく、保持オブジェクトにIDを割り当てることができ、Nhibernateはビジネストランザクションが完了するまで書き込みを遅らせ、データベースへの往復を減らします。

IDジェネレーターはそうです ポストインターのポイドジェネレーター グループ:

ポストインターのポイドジェネレーターは、IDを生成するためにデータをデータベースに持続させる必要があります。 これにより、Nhibernateの動作が非常に微妙な方法で変化し、いくつかのパフォーマンス機能が無効になります。そのため、これらのPoidジェネレーターの使用は強く落胆しています! 他のアプリケーションがこの動作に依存している既存のデータベースでのみ使用する必要があります。

引用は、Nhibernate 3.0 Cookbookから取られました。

フォローしてみましたが、うまくいきました:

<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