2016-08-29 6 views
0

私はメインフレームからjavaへの移行に取り組んでいます。 DB2には1つのテーブルがあります。私はGemfireの領域としてこのテーブルを複製しています。これを実行している間、私はそのテーブルの複合主キーを持っています。テーブルをgemfire領域に複製する。私は地域のための複合主キーを作りたい。私はちょうどそれを知りたいです、リージョンに複合プライマリキーを作成する可能性はありますか?Gemfire地域で複合主キーシナリオを作成するにはどうすればよいですか?

答えて

1

理想的には、キー/値のペアがリージョンに「入れられた」後に値が変化しないキーを作成しています。 GemFire/Geode Regionは、java.util.Map(正確にはHashMap)の賞賛されたバージョンです。

これは、 "複合"キーがRegion値自体のプロパティ値に基づいてはならないことを意味します。一例として、私はそうのように定義された値Customerを持っている想像...

class Customer { 

    Long accountNumber; 

    Gender gender; 

    LocalDate birthDate; 

    String firstName; 
    String lastName; 

    ... 
} 

人の生年月日ながらそう...

class CustomerKey { 

    LocalDate birthDate; 

    String firstName; 
    String lastName; 

} 

のようなキーを作成した後にはお勧めできませんでしょうこれらの個々のプロパティ/フィールド値のいずれかが変更された場合、Java Mapの本質的な振る舞いを考慮してペアリングを失います(注意してください)。

また、作成する「カスタム/コンポジット」キークラスのメソッドequals/hashCodeを慎重に作成するよう注意してください。

通常、内部(アプリケーションにのみ知られている)のスカラータイプを使用することをお勧めします。 LongまたはString

class Customer { 

    Long id; 

    ... 

} 

時間のほとんどを

、あなたの(OQL)クエリ述語が個々の値に基づいています。これは、そうのような Customerクラスにプロパティ/フィールドを追加するのと同じくらい簡単だろう

...ドメインオブジェクトのプロパティ/フィールドであり、キーではありません。あなたの鍵はStringた場合たとえば...

はまた、あなたはユニークな値を生成するUUIDクラスを使用することができます。それ以外の場合は、独自の独自の鍵生成戦略を策定する必要があります。

要するに、Javaで慎重に作成されたクラスの種類を指定することで可能なことは可能ですが、一般的には推奨されません。シンプルなスカラー型を好む。

ここには、一般的なことを覚えておいてほしいことがいくつかあります:linkです。

これが役に立ちます。

-john

+0

はいjohn、あなたは正しいです。あなたのアドバイスに従って、私は複合主キーを首尾よく実装しました。私は、シリアライゼーションとデシリアライゼーションのために、複合プライマリキーPOJOのjarファイルをgemfireサーバにデプロイする必要があります。ありがとうジョン。 –

関連する問題