問題タブ [optimistic-locking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate - トランザクション中にバージョンがインクリメントされない
次のシナリオがあります。
- 取引開始
- person.getVersion() --> 0 を返す
- person.setName("汚い");
- session.save(人);
- person.getVersion() --> 0 を返す
- session.flush()
- person.getVersion() --> 1 を返す
- トランザクションコミット
ステップ 4 で、実際にセッション フラッシュまたはトランザクション コミットを強制せずに、更新されたバージョンを取得するにはどうすればよいですか?
ありがとうございました!
hibernate - デフォルトでHibernateのオプティミスティックロック
Hibernateでの楽観的ロックについて1つ質問があります。私はHibernateを使用して楽観的ロックの内部に深く入り込もうとしていますが、疑問が1つあります。Hibernateはバージョンアプローチ(整数またはタイムスタンプ)を使用して楽観的ロックを実装します。構成するには、@ Versionアノテーション(またはxml構成)を使用してバージョン属性を作成できます。もう1つのオプションは、optimistic-lock="all"属性を使用してバージョン管理せずに構成することです。
私の質問は、バージョン管理属性を定義せず、またoptimistic-lock属性を指定しない場合です。この場合、どの戦略でHibernateを使用しますか?Pessimistc Lockingいいえ、確かにそうです。楽観的ロックだと思いますが、方法がわかりません。
ご清聴ありがとうございました。
java - JPA: 読み取りロックはどのように機能しますか?
EntityManager.lock(entity, LockModeType.READ) を呼び出すことの影響を理解しようとしています。API ドキュメントは、私にとって非常にわかりにくいように思えます。
同時スレッドが必要で、スレッド 1 が lock(entity, LockModeType.READ) を呼び出した場合、スレッド 2 は引き続きエンティティを読み書きできますか?
これまでに学んだこと:
JPA1 のロック・タイプ READ は、JPA2 の OPTIMISTIC と同じです。このようなロックが設定されている場合、EntityManager はトランザクションをコミットする前にバージョン属性をチェックしますが、更新はしません。OPTIMISTIC ロック モードの説明を見つけました: Link。OPTIMISTIC (READ) LockMode Example を検索します。私がこれを理解している限り、スレッド 1 で読み取りロックを設定しても、スレッド 2 ... n には影響しません。他のすべてのスレッドは、引き続きエンティティの読み取りと書き込みを行うことができます。ただし、スレッド 1 のトランザクションがコミットされ、別のスレッドがエンティティを更新すると、スレッド 1 のトランザクションはロールバックされます。
私はこれを正しく理解していますか?
java - 冬眠します。楽観ロック。バージョンを生成しても選択する
私はエンティティを持っています:
エンティティが何回保存されても、トランザクションの最後にHibernate はオブジェクトのバージョンを選択します。なんで?Hibernate は、オブジェクトを保存するときにこのバージョンを生成するため、それを認識しています。このメソッドがこれを呼び出すことがわかりました:
Hibernate はこれをログに生成します。
MySQL と Session#save() を使用しています。
spring - HibernateOptimisticLockingFailureExceptionは、接続を「閉じた」とマークしますか?
次のスタックトレースを取得しています。
これは、楽観的ロックの例外によるものです。私はこれの根本的な原因に対処することができます。
私の質問は、このシナリオでは、例外処理によってデータベース接続が「クローズ」に設定されることです。(これは私の接続プールで問題を引き起こします)。
HibernateOptimisticLockingFailureException
春に泡立ち、休止状態になり、閉じた接続を返すようなデータベース例外を処理するためのパターンは何ですか?
接続を閉じるように設定するSpring/Hibernateコードの部分を知っていますか?
sql-server - SQL Server 2005および2008では、悲観的な同時実行モデルまたは楽観的な同時実行モデルを使用していることをどのように判断しますか?
SQLServer2000には悲観的な同時実行モデルがあることを私は知っています。また、楽観的なモデルがSQL Server 2005に追加されました。では、SQL Server 2005および2008で悲観的な同時実行モデルを使用しているか、楽観的なモデルを使用しているかをどのように判断すればよいでしょうか。
ありがとう。
grails - Grails:バージョンチェックと更新がアトミックであることを確認するものは何ですか?
Grailsのupdate
アクションは、最初に更新するオブジェクトのバージョンをチェックしてから、それを更新します。Grailsのどの部分が、バージョンの確認とオブジェクトの更新中に別のリクエストによってオブジェクトが更新されないようにしますか?
アップデート:
はい、hibernateはオブジェクトを保護するときにバージョンをチェックし、楽観的ロックが失敗した場合に例外をスローします。そして、休止状態はcheck + updateがアトミックであることを確認すると思いますが、...
grailsで生成されたupdateメソッドを見ると、grailsが最初にダブルチェックし、次に(私の観点から)例外を処理する準備ができていないことがわかります。updateメソッドが正しいバージョンをすでにチェックした後に休止状態が例外をスローする可能性はわずかですが、私には可能であるように思われます。
では、保存を試みて例外をキャッチするだけで十分ではないでしょうか(存在する場合)。
hibernate - Spring MVC、Hibernate アプリで @Version フィールドを保護するために @InitBinder を適用する方法は?
Hibernate 4.1 を使用する Spring 3.1 MVC アプリでは、以下を使用しています。
- 宣言的なトランザクション管理
- リクエストごとのセッション
- ドメイン オブジェクトに「バージョン」プロパティを追加することによる楽観的ロック
- saveOrUpdate() を使用して切り離されたドメイン オブジェクトを再接続する
ドメイン オブジェクトは、ユーザーが更新できるように、GET 要求中にコマンド オブジェクトとして送信されます。
「オプティミスティック ロックに失敗しました。ネストされた例外は org.hibernate.StaleObjectStateException です: 別のトランザクションによって行が更新または削除されました (または保存されていない値のマッピングが正しくありませんでした)」というエラーが発生しないようにするために、各 JSP ページに「<form:hidden path="version"/>
」を含めています。更新は正常に機能しています。
アプリをさらに保護するために、コントローラーに次を追加しようとしています。
しかし、そうすると、楽観的ロックに失敗しましたというエラーが表示されます。ネストされた例外は org.hibernate.StaleObjectStateException: 行が別のトランザクションによって更新または削除されました (または、保存されていない値のマッピングが正しくありませんでした)".
私がやろうとしていることがアプローチとして有効かどうか、そして私が間違っていることを誰かが説明してもらえますか?
理想的には、特定の jsp ページによって変更されていないドメイン オブジェクトの主キーとおそらくいくつかのフィールドを保護しようとする必要があると思います。
前もって感謝します。
java - hibernate-jpa2.0 で OptimisticLockException をスローする方法
私は現在、私のプロジェクトで楽観的ロック管理に取り組んでいます。JPA 2.0 (hibernate-jpa2.0-api-1.0.1.Final) を使用し、データソースは JBoss 7 によって提供されます。
私がしたこと
私のエンティティ「AccordSimple」では、@Version アノテーションを使用します。
そして、これは私のAccordServiceImplです
これにより、OptimisticLockException はスローされません。マージの直前にアコードに含まれていたバージョンが、私の DB のバージョンの下にあったとしても。
その理由がわかりました。これは責任者です:
メソッドを次のように変更すると、
OptimisticLockException がスローされます。
問題
バージョンは、私の DTO からではなく、Hibernate キャッシュから取得されます。したがって、エンティティをデタッチすると、すべてが機能します(推測します)が、それはしたくありません(開発者がそれを忘れた場合のバグの原因...)。
何か考えはありますか?
hibernate - 休止状態の @Version、クラスター環境で実行している場合は機能しません...(楽観的ロック)
フィールドの 1 つで @version を使用するエンティティがあります。2 つのトランザクションがこのエンティティを同時に変更すると、1 つが失敗し (楽観的ロック例外が発生し)、もう 1 つが成功するようにしたいと考えています。
このテストを単一の JVM で実行すると正常に動作しますが、クラスター環境で実行すると、2 つのトランザクションが成功し、楽観的ロックはスローされません。
私は何かを逃していますか?@Version で "@Generated(GenerationTime.ALWAYS)" を使用する必要がありますか?
ちなみに、アプリでSpringとhibrnateを使用しています...何か考えはありますか?