2012-05-01 5 views
3

hiberante。私はここに状況がある、私はユーザーが項目を追加したり削除したりできる在庫がある。例えば、総量= 50である。今度は2人のユーザーがAで削除した2つのアイテムとBで削除した4つのアイテムのような在庫を更新したいと思うので、合計の数は44になります。今、両方のユーザーが同時に在庫を更新しようとすると??トランザクションが維持されていない場合は、50-2 = 48、50-4 = 46のようになります。春のMVCでの取引と私は春のMVC 3.0を使用し、休止してい

答えて

-1

あなたがバージョン管理と楽観的ロックを使用することができます。これは、Hibernateリファレンスガイドのセクション全体の話題です。 永続クラスマッピングに またはプロパティを追加するとすぐに、バージョン管理によるオプティミスティックロックが有効になります。 XMLでのプロパティマッピングは、識別子プロパティのマッピングの直後に配置する必要があります。これにより

<class name="Item" table="ITEM"> 
    <id .../> 
    <version name="version" access="field" column="OBJ_VERSION"/> 
    ... 
</class> 

、アイテムが更新され、SQLは次のようになります。

update ITEM set INITIAL_PRICE='12.99', OBJ_VERSION=2 
where ITEM_ID=123 and OBJ_VERSION=1 

仕事の別の同時ユニットを更新した場合同じ行をコミットした場合、 OBJ_VERSION列には値1が含まれなくなり、行は更新されません。 JDBCドライバ 、この場合には、更新された行の数であり、ゼロと StaleObjectStateExceptionをスローによって返される Hibernateは、この文の行数をチェックします。

バージョンまたはタイムスタンプカラムを持っていない場合は、Hibernateはまだ自動 バージョン管理を行うことができますが、しかし、同じ 永続コンテキストで検索し、変更されたオブジェクトのための(つまり、同じセッションです)。 この代替バージョニング実装では、オブジェクト が取得されたとき(または最後に永続コンテキストがフラッシュされたとき)の現在のデータベース 状態を、永続プロパティの未変更値と比較してチェックします。あなたは クラス マッピングに楽観的ロックの属性を設定することで、この機能を有効にすることがあります。

<class name="Item" table="ITEM" optimistic-lock="all"> 
<id .../> 
... 
</class> 

次のSQLは、現在アイテムのインスタンスの変更をフラッシュするために実行されます 更新ITEMは= '12 0.99' ITEM_PRICEを設定しましたITEM_ID = 123 とITEM_PRICE =「9.99」 とITEM_DESCRIPTION =「項目」 と... との両方の場合でSELLER_ID = 45

は、それが2番目のトランザクションを再起動するか、マージするのはあなた次第です いつ更新するあなたはStaleObjectStateExceptionを取得します。このケースは非常にまれでなければなりません。そうでなければ、トランザクションスコープを縮小してより小さくより速くするためにリファクタリングする必要があります。

あなたが詳細CHRISTIAN BAUERとGavin King氏の著書「Hibernateで永続Java」を参照してくださいすることができます。 (推奨)

EDIT:ライアンは正しいです。私は自分の答えを正す。

+1

これも間違っています。 Hibernateはデフォルトでオプティミスティックロックになっているので、「うまく動作しません」。 –

+0

@ Ryan Stewart楽観的なロックではどういう意味ですか?あなたは少し説明できますか? – curiouss

+0

私は楽観的なロックを検索し、それを発見しました。楽観的なアプローチは、すべてがOKであり、矛盾するデータの修正が稀であると仮定します。 楽観的並行性制御は、データが書き込まれる作業単位の終わりにのみエラーを発生させます。マルチユーザー・アプリケーションは通常、オプティミスティック並行性制御と読み取りコミットされた分離レベルのデータベース接続にデフォルト設定されています。追加の隔離保証は、適切な場合にのみ得られます。たとえば、反復可能な読み取りが必要な場合です。 この方法は、最高のパフォーマンスとスケーラビリティを保証します。 – Jacky

関連する問題