5

古いテーブルから新しいテーブルにデータを移行する SQL スクリプトを作成しようとしています。新しいテーブルの主キー (id) は、古いテーブルの主キーと同様に hibernate によって管理されます。プレーン SQL を使用して新しいテーブルに ID を割り当てる方法がわからないので、古いテーブルから ID を取得しています。移行スクリプトは期待どおりに機能します。

ある時点で、アプリケーションが Hibernate を使用して新しいテーブルにデータを挿入しようとすると、主キー制約違反の例外が発生します。これは、古いデータを移行するときに指定したキーと衝突するキーを割り当てている休止状態が原因であると思われます。ところで-休止状態は、テーブルごとに一意の主キーを割り当てるように構成されています。

私は何を間違っていますか?これをどのように解決すればよいですか?

ありがとう

4

2 に答える 2

2

プライマリ (mysql、MSSQL など) キー列の自動インクリメントを使用するデータベースを使用する場合は、自動インクリメント値を既存の ID から最大値として設定する必要があります (移行後)。シーケンスを使用して ID (たとえば、oracle、postgree) を生成する場合は、現在のシーケンス値を既存の ID から最大値に変更する必要があります (移行後)。

于 2012-07-16T08:45:20.513 に答える
1

わかりました-@GeneratedValue(strategy = GenerationType.TABLE)をHibernateで使用すると、DB内の各テーブルの次のIDを追跡するhibernate_sequencesテーブルがあります。したがって、ここで前に述べたように、このテーブルを更新して次の ID を正しく設定するだけで済みました。

ありがとう!

于 2012-07-16T12:43:31.147 に答える