問題タブ [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 - Grails の楽観的ロックの奇妙な動作
統合テストでGORMに楽観的ロックエラーをスローさせようとしています。複数のスレッドに頼らずに同時更新エラーをテストすることはできないと前に言われましたが、それでも私のテスト ケースの動作は驚くべきものでした。
Widget の再アタッチされたインスタンスはデータベースに永続化されませんが、例外はスローされません!
私のテストケースはかなり不自然ですが、それでも結果には驚かされます。
誰でもこれを説明できますか?
java - 同じ値を再度設定するためのJPAの動作を定義しますか?
JPAによる動作の定義があるかどうか、プロパティの値を設定する場合、私は疑問に思います。仕様に言葉が見つかりませんでした。
TopLink Essentials と Hibernate でテストしました。データベースからエンティティをロードし、プロパティに同じ値を再度設定するとどうなりますか。
で同じ値を設定する
バージョン値を変更しません。
すべての実装でこの動作を期待できますか。私はそうは思わない...
nhibernate - NHibernate は楽観的なシナリオで同時実行性を上書きします
同時実行状況のために楽観的ロックを実装しました。マッピング ファイルでバージョン プロパティを使用して、整数にリンクしました。
私の目的は、ユーザーが古いオブジェクトを保存しようとした場合に、変更を上書きするオプションが与えられるようにすることです。
SaveOrUpdate で例外をスローすることは簡単にできましたが、それをオーバーライドして、ユーザーが望む場合、バージョン番号を更新しながら、手動メンバーを実行せずに、現在のオブジェクトが既存の永続化されたオブジェクトを上書きする方法を教えてください。変数を古くないオブジェクトにコピーしますか?
これは通常の論理的なシナリオのようですが、これに対する組み込みのメカニズムは見当たりません。これはアンチパターンですか?
あなたの助けと洞察に感謝します。
敬具
LJ
java - Java MUDで永続性をどのように処理する必要がありますか?OptimisticLockExceptionの処理
元の開発者の許可を得て、Javaで古いBBSMUDゲームを再実装しています。現在、ゲームロジックにはEJBセッションファサード、永続性にはJPAを備えたJavaEE6を使用しています。セッションBeanを選んだ大きな理由はJTAです。
私は、OptimisticLockExceptionが発生した場合にそれをキャッチして、データが古く、再適用/再送信する必要があることをユーザーに通知するWebアプリの経験が豊富です。マルチユーザーゲームで常に「再試行」と応答すると、ひどい経験になります。戦闘中に複数の人が1つのモンスターをターゲットにすることを期待していることを考えると、OptimisticLockExceptionの可能性は高いと思います。
telnet CLIを提示する部分である私のビューコードは、EJBクライアントです。PersistenceExceptionsとTransactionRolledbackLocalExceptionsをキャッチして、再試行する必要がありますか?いつ停止するかをどのように決定しますか?
悲観的なロックに切り替える必要がありますか?
すべてのユーザーコマンドが過剰に殺された後も持続していますか?全世界をRAMにロードし、数分ごとに状態をダンプする必要がありますか?
セッションファサードをチョークポイントとして機能するEJB3.1シングルトンにして、あらゆるタイプのJPAロックを実行する必要をなくしますか?EJB 3.1シングルトンは、マルチリーダー/シングルライターデザインとして機能します(メソッドにリーダーおよびライターとして注釈を付けます)。
基本的に、再送信/再試行のプロンプトをユーザーに提示することが受け入れられないアプリケーションで、データの同時変更に最適な設計とJavaPersistenceAPIは何ですか?
c# - Fluent NHibernate OptimisticLock.None() により、「文字列 'none' は有効なブール値ではありません。」
次のマッピングを使用しています。
しかし、セッションを作成しようとすると、次の例外が発生します。
[FormatException: 文字列 'none' は有効なブール値ではありません。]
[XmlSchemaValidationException: 'optimistic-lock' 属性が無効です - 値 'none' はそのデータ型によると無効です ' http://www.w3.org/2001/XMLSchema:boolean ' - 文字列 'none' は有効なブール値。]
私はNHibernate 2.1.2.4000を使用しており、Fluent NHibernate 1.0RTMを使用していましたが、これが最近修正されたものではないことを確認するために、最新のビルド636を試しました。
補足として、これをすべて間違っている場合に備えて、Version をインクリメントせずに .Bids リストを変更できるようにしたいと考えています。Ayende のブログで、プロパティで私が望んでいたことを行った例を見ました。
google-app-engine - GAE は同じエンティティの異なるフィールドを更新します
UserA と UserB は objectA.filedA objectA.filedB をそれぞれ同時に変更しています。それらは同じフィールドを変更していないため、重複はないと考えるかもしれません。本当?または pm.makePersistnace() の実装は、実際にはオブジェクト全体をオーバーライドします...知っておくと便利です...
nhibernate - optimistic-lock="version" および dynamic-update="true" を使用した NHibernate マッピングが無効な更新ステートメントを生成している
永続化するために集約に追加された ID が割り当てられたエンティティ「グループ」があります。NHibernate はそれが新規か既存かを判別できないため、これは問題を引き起こします。この問題を解決するために、マッピングを変更して、グループ エンティティが SQL タイムスタンプ バージョン列で楽観的ロックを使用するようにしました。これにより、新しい問題が発生しました。グループにはサブ オブジェクトのバッグがあります。そのため、NHibernate が新しいグループをデータベースにフラッシュするとき、最初に Groups テーブルに Group レコードを作成し、次に各サブオブジェクトを挿入してから、Group レコードを更新してタイムスタンプ値を更新します。ただし、マッピングが dynamic-update="true" および optimistic-lock="version" の両方である場合、更新を完了するために生成される sql は無効です。
マッピングは次のとおりです。
マッピングに動的更新と楽観的ロックの両方が含まれている場合、生成される SQL は次のとおりです。
SET ステートメントがないため、これは明らかに無効です。動的更新部分を削除すると、代わりにこの更新ステートメント中にすべてが更新されます。これにより、ステートメントは有効になりますが、不要になります。
誰もこの問題を見たことがありますか? 何か不足していますか?
ありがとう、スティーブ
nhibernate - CastleActiveRecordのプロパティの楽観的ロック
Castle ActiveRecordはプロパティを楽観的にロックできますか?クラス全体に対して楽観的ロックが見つかりましたが、個々のプロパティに対してはそうではありませんでした。私の場合、コレクション内の要素を追加/削除してもエンティティのバージョン番号が更新されないようにする必要があります(たとえば、プロパティを変更せずににを追加しProduct
てもバージョン番号は増加しません) 。Store
Store
java - jdbctemplate と楽観的ロック
私がHibernateにいるプロジェクトでは、Spring jdbctemplateが混在しています。楽観的ロックを追加しました。Hibernate はバージョン管理でうまく機能しますが、バージョン管理も使用するには、このすべての jdbctemplate コードを変換する必要があります。
LockingJdbcTemplate (SimpleJdbcTemplate など) のようなものはありますか? 一般的な更新メソッドを実装できると考えていました
私ができる場所:
- version=version+1 を columnSql に追加
- バージョンを追加=? whereSqlへ
- パラメータ内の正しい場所にバージョン番号を追加します(別のパラメータがその値を渡すことを強制しています)
- 正確に 1 つのアイテムが更新されたことを確認し、それ以外の場合は StaleObjectStateException をスローします
jdbctemplate をラップして、私に似たようなことをするライブラリはありますか? 存在するものを発明したくありません... :)
java - 楽観的ロックバッチ更新
バッチ更新で楽観的ロックを使用するにはどうすればよいですか?私は使用SimpleJdbcTemplate
しており、単一の行に対して、バージョン列の値をインクリメントし、WHERE句にバージョンを含めるupdatesqlをビルドできます。
残念ながら、int[] updated = simpleJdbcTemplate.batchUpdate
Oracleドライバを使用した場合、結果には行数が含まれません。すべての要素は-2であり、不明な行数を示します。
すべての更新を個別に実行するよりも、これを行うためのよりパフォーマンスの高い方法は他にありますか?これらのバッチには、平均5つのアイテム(のみ)が含まれますが、最大250のアイテムが含まれる場合があります。