2

最近まで、休止状態の@Entity 注釈を使用してデータベース テーブルにマップしていました。すべての主キーには@GeneratedValueの注釈が付けられています。(strategy = GenerationType.IDENTITY)

新しいスキーマを作成し、古いスキーマから新しいスキーマにデータを移行する必要があるシナリオがありました (ドロップ、長さ、型などの列の変更はほとんどありません)。

アプリケーションを使用してデータを挿入しようとすると、新しいスキーマテーブルへのデータの移行が成功した後、例外がスローされます

[ERROR] util.JDBCExceptionReporter DB2 SQL Error: SQLCODE=-803, SQLSTATE=23505, SQLERRMC=1; _NewSchema_._TableName_ , DRIVER=3.51.90

同じアプリケーションが空のテーブルで正常に動作しているため、アプリケーションは主キー値が 1 から始まる行を再度挿入しようとしていると思います。

主キーの値を既存の行の主キーの最大値として挿入するデータ行が必要です。

どんな助けでも感謝します:)

4

3 に答える 3

3

はい、テーブルを変更することでそれを行うことができます。テーブルを変更し、ID 列の開始インデックスを に設定しますDB2

の最大行がであり、ID 列の名前が でTBALE_Aあるとします。50TABLE_ID

ALTER TABLE TBALE_A ALTER COLUMN TABLE_ID
   RESTART WITH 51
于 2013-04-02T10:42:50.993 に答える
1

あなたの推測は正しいです。これが私の解決策です。次の SQL を実行して、ID 列に指定された開始位置を指定すると、アプリケーションは正常に動作します。

alter table TABLE_NAME alter column ID set GENERATED BY DEFAULT RESTART WITH 10000;

お役に立てれば幸いです:)

于 2013-04-02T10:45:16.320 に答える