1

MS SQLサーバーデータベースで読み取り/書き込み操作を行うためにHazelCastを使用しています。主キーが自動インクリメント列であるデータベース テーブルがあります。アプリケーションの起動時に、このテーブルの既存のデータをマップに読み取ります。Map には、基礎となる MapStore 実装があります。マップのキーは、自動インクリメント列の値です。マップの値は、テーブルのいくつかのフィールドを含むオブジェクトです。

ユーザーは、HazelCast レイヤーを介してこのテーブルにレコードを挿入できます。この挿入はトランザクションで実行されます (TransactionalMap は HazelCast から取得されます)。

この場所で、TransactionalMap インスタンスに設定する主キー値 (自動インクリメント値) がないため、問題に直面しています。MapStore の store() メソッドにデータベース テーブル ロジックへの挿入があり、store() メソッドはトランザクションで commit が呼び出された後にのみ呼び出されます。最初にキー値 (自動インクリメント値) をマップに設定する方法がわかりません。自動インクリメント値は、テーブルへの挿入後に取得できます。

アイデア/ポイントは大歓迎です。

ありがとう、srguruprasad

4

2 に答える 2

0

あなたが求めていることを実行する唯一の方法は、コードでデモ レコードをデータベースに書き込み、それを Hz に読み込んで、MapStore に挿入ではなく更新を行わせることです。もちろん、これは遅くて面倒です。

最善の解決策は、自動インクリメントをオフにすることですが、別のフィールドをキャッシュ キーとして使用することもできます。たとえば、cacheKey というメンバーを使用して、それをデータベース レコードに格納します。MapStore に挿入するときは、どこにdatabaserecord.cachekey == cacheKeyを挿入する必要があります。

于 2016-11-07T18:52:35.987 に答える