私は、NHibernateの並行性について、ayendeのブログhttp://ayende.com/blog/3946/nhibernate-mapping-concurrencyを見ていましたが、私はまだ使い方が分かりません。それはStaleObjectExceptionを解決する解決策のようです。Nhibernateを使用する場合<version>?
どのようなシナリオで誰かが私に説明する理由は何ですか?
ありがとうございました。
私は、NHibernateの並行性について、ayendeのブログhttp://ayende.com/blog/3946/nhibernate-mapping-concurrencyを見ていましたが、私はまだ使い方が分かりません。それはStaleObjectExceptionを解決する解決策のようです。Nhibernateを使用する場合<version>?
どのようなシナリオで誰かが私に説明する理由は何ですか?
ありがとうございました。
Optimistic concurrency controlを実装する場合は、NHibernate Versionが使用されます。オプティミスティック同時実行制御を有効にしないで、アプリケーションをロックすると、 "Last commit wins"戦略が使用されます。 2つのトランザクションがほぼ同じ時間に同じオブジェクトを変更していると、更新が失われる可能性があります。より適切な戦略は「First Commit Wins」と呼ばれます。このシナリオでは、2番目のトランザクションが失敗し、次のようなエラーが表示されます。誰かが既にコミットしようとしているデータに の変更をコミットしました。古くなった データで作業しています。新しいデータで会話を再開してください。 Java Persistence with Hibernateから
:
Hibernateは、自動バージョン管理を提供します。各エンティティインスタンスのバージョンは で、数値またはタイムスタンプにすることができます。 Hibernateは、オブジェクトのバージョンが変更されたときに オブジェクトのバージョンをインクリメントし、バージョンを自動的に比較します。 は、競合が検出された場合に例外をスローします。その結果、 すべての永続エンティティクラスにこのバージョンのプロパティを追加して オプティミスティックロックを有効にします。 ...バージョン番号はちょうどカウンター値です。便利なセマンティック の値はありません。エンティティテーブルの追加カラムは、Hibernateアプリケーションで使用されます。 同じデータベースにアクセスする他のすべてのアプリケーションは、 (おそらくは)楽観的なバージョン管理を実装し、同じ バージョンの列を利用することができます。
ありがとうございます。 –