3

私は非常に単純なシナリオ、1 つのテーブル、自動生成主キーの 1 つのシーケンスを持っています。

CREATE TABLE foo (event_id NUMBER(19,0)....
CREATE SEQUENCE event_seq

ハイバネート マッピングの一部は次のようになります。

...
<id name="id" column="EVENT_ID" type="long">
   <generator class="native">
      <param name="sequence">event_seq</param>
   </generator>
</id>
...

長時間問題なく動作します。しかし、最近私はこれを持っています:

ORA-01400: cannot insert NULL into ("TESTING"."FOO"."EVENT_ID")

これは、Oracle が EVENT_ID のシーケンス番号を生成できなかったことを意味しますか? この理由は何ですか?どうやらこのエラーは 64 ビット Oracle から発生したようですが、問題に関連している可能性はありますか? テーブルとシーケンスを削除して再作成しても役に立ちません。その特定のマシンで動作したくないだけです。私が何をしても、これを再現できません。エラーは、ほとんど到達できないユーザーの1人から発生します。

何か案は?

- - - - - - - - 問題が解決しました - - - - - - - -

元の問題は、32 ビット OS でドライバー 10.2.0.1.0 を使用しているときに、Oracle 10.2.0.1.0 64 ビットで検出されました。ドライバーが 11.2.0.2.0 に更新されると、問題は解消されました。VM が 32 ビットまたは 64 ビット システムとして実行されているかどうかは、すべて VM に依存します。

4

1 に答える 1

1

Oracleは、テーブル挿入でシーケンス番号を自動的に生成しません。インサートにコーディングするか、トリガーにコーディングするか、休止状態で実行する必要があります。

<generator class="sequence">休止状態にする必要がある場合、または休止状態のセットアップでOracleデータベースを処理していると考えるのをやめた場合は、休止状態が必要だと思います。

于 2011-05-12T12:34:29.360 に答える