hiberante。私はここに状況がある、私はユーザーが項目を追加したり削除したりできる在庫がある。例えば、総量= 50である。今度は2人のユーザーがAで削除した2つのアイテムとBで削除した4つのアイテムのような在庫を更新したいと思うので、合計の数は44になります。今、両方のユーザーが同時に在庫を更新しようとすると??トランザクションが維持されていない場合は、50-2 = 48、50-4 = 46のようになります。春のMVCでの取引と私は春のMVC 3.0を使用し、休止してい
答えて
は正しいセマンティクスを保証するためにversion propertyを使用してください。 "Optimistic concurrency control"
あなたがバージョン管理と楽観的ロックを使用することができます。これは、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. エラーのjavaを取得する:私は春のMVC +春ブーツ休止状態を使用していたシンボルクラス
- 2. 春のMVC、休止状態と春のセキュリティを説明してください
- 3. :春MVCで3.0
- 4. Javaの春3.0 MVC
- 5. 春3.0 MVCはmessages.properties
- 6. 春休みとスプリングウェブmvc
- 7. 春コントローラが呼び出されない私は春のMVCと春のセキュリティを使用してい
- 8. 春MVC
- 9. 春は-MVCは
- 10. 私は休止状態と春4 MVCでの基本的なCRUDをやろうとしている - SPRING 4
- 11. Tomcatが、私は春のMVC(春3.0.0)を使用して、学校のプロジェクトに取り組んでいます豆
- 12. Javaの春/休止状態:criteria.listを使用して上のNullpointException()
- 13. どのように春のMVCは、(最大休止状態を使用して)フォームを検証
- 14. 春RestTemplate私は春の休憩に新しいですInvalidMediaTypeException
- 15. 春のMVCモックエラー
- 16. Thymeleaf例外春データ休憩+春のセキュリティを使用して
- 17. 春@query私は春のクエリ、 のテーブル名を使用したいの引用
- 18. 春のテスト私はMVCのために春を使用しています無担保のURL
- 19. 春のMVCのWebLogic 10.3.6エラー403-禁止
- 20. は、私はポストとしてRequestBodyを取るSpring MVCのコントローラを持って春
- 21. Struts1春と休止状態
- 22. 春MVC:
- 23. 春MVC:
- 24. 春の休止状態ManyToMany
- 25. 春休止の問題
- 26. 春休止-docsのアプリケーションは、スニペットを生成していない
- 27. 春MVC:トランザクションは
- 28. 春ウサギと春の取引は
- 29. ショッピングカートの春のMVC
- 30. 私はSpring MVCのWebアプリケーションに春のセキュリティを実装しようとしていたJavaコンフィグ春のセキュリティ
これも間違っています。 Hibernateはデフォルトでオプティミスティックロックになっているので、「うまく動作しません」。 –
@ Ryan Stewart楽観的なロックではどういう意味ですか?あなたは少し説明できますか? – curiouss
私は楽観的なロックを検索し、それを発見しました。楽観的なアプローチは、すべてがOKであり、矛盾するデータの修正が稀であると仮定します。 楽観的並行性制御は、データが書き込まれる作業単位の終わりにのみエラーを発生させます。マルチユーザー・アプリケーションは通常、オプティミスティック並行性制御と読み取りコミットされた分離レベルのデータベース接続にデフォルト設定されています。追加の隔離保証は、適切な場合にのみ得られます。たとえば、反復可能な読み取りが必要な場合です。 この方法は、最高のパフォーマンスとスケーラビリティを保証します。 – Jacky