2016-06-28 10 views
0

私はHibernateフレームワークを使って2つの異なるホストから2つのJavaプロセスによってアクセスされているMySQL DBを持っています。 私は両方のホスト上のプロセスからのアクセス時にDBの一貫性を保つため、SQLを使用して、基になるデータベースでauto_incrementとしてアクセスしているテーブルの主キーを作成しました(私はauto_incrementをハイバネーション、私はそれを動作させることができませんでした。) 今、私の問題は、メモリ内のオブジェクトをハイバネートキャッシュし、永続操作が完了したときに、同時アクセス時に重複した主キーエラーが発生します。私が理解しているのは、Hibernateが、最後の読み込み中に読み込んだ最も高いプライマリキーに基づいてプライマリキー番号を使用しているためです。しかし、別のプロセスがDBを更新する可能性があるため、hibernateの最新のプライマリキー値は古く、既存の(他のプロセスによって更新された)プライマリキーを使用して終了します。Hibernate:マルチプロセスDBへのアクセス

プライマリキー(重複を招くため)のフィールドをhibernateから永続化し、auto_incrementを使用してDBがそれを判断できるようにする方法があるかどうかを知りたいと思います。

答えて

0

世代戦略をsequenceまたは​​(データベースによって異なる)に変更する必要があります。 IDの生成はデータベース内で行われるため、これらは安全で優れています。 がHow to choose the id generation strategy when using JPA and Hibernate

+0

はまたあなたのエンティティにバージョンまたはタイムスタンプを追加します。..楽観的ロックを有効にして、任意の同時実行の問題を回避するために:

このStackOverflowの回答を参照してください。 – Zulfi

関連する問題