1

私のpostgresqlデータベースのIDは自動増分です(データベースで定義されたシーケンスがあります)。Hibernateマッピングファイルを作成するとき、クラスジェネレーターをインクリメントするように設定しました。

<class name="model.Names" schema="public" table="names">
    <id name="id" type="int">
      <column name="id"/>
      <generator class="increment"/>
    </id>

ただし、あらゆる種類のエラー(nullポインター例外、org.hibernate.TransactionException:トランザクションが正常に開始されない)が発生し続けるため、デバッグして他の場所でエラーを探す前に、これが正しいジェネレータークラスであることを最初に確認したいと思いました。シーケンスを試しました(まったく機能しない、場合によっては増分が機能する)。アプリケーションはJSF2.0で書かれています。

提案を事前に感謝します。

よろしく、サス。

4

1 に答える 1

2

シーケンスを使用する場合は、必ずいずれかを使用するかsequence hi seqhilo/loアルゴリズムジェネレーターを使用する必要があります。問題は、「まったく機能しない」ということは、あなたが直面した問題を理解するのにまったく役立たないということです。

念のため、sequenceジェネレーターのスニペットを次に示します。

<id name="id" type="long" column="person_id">
        <generator class="sequence">
                <param name="sequence">person_id_sequence</param>
        </generator>
</id>

そしてseqhiloジェネレーターの場合:

<id name="id" type="long" column="cat_id">
        <generator class="seqhilo">
                <param name="sequence">hi_value</param>
                <param name="max_lo">100</param>
        </generator>
</id>

「まったく機能しない」理由を調査したい場合は、生成されたSQLのロギングを有効にして、何が起こっているかを確認することをお勧めします。

また、SERIALまたはBIGSERIAL列を使用する場合、PostgreSQLはidentityジェネレーター(HB-875およびHHH-1675を参照)をサポートしていることに注意してください。

参考文献

于 2010-09-23T14:55:15.003 に答える