Pivotal Knowledge Base

フォローする

GemFire OQL による List 構造に等価結合を行う方法

適用範囲

GemFire 7.0.2 にて動作確認

目的

本記事の目的は、GemFire において、List 構造のオブジェクトと、整数型といった単純な型のフィールド間で結合を行う方法を示すことである。理由は、この方法が GemFire のユーザーガイドに記載されておらず、製品インストール時に提供される quickstart サンプルにも含まれていないためである。

解決策

通常、同一の型の単純な 2 つのフィールドに対する等価結合は以下のように行う。

select * from /Groups g, /Privileges p where p.Id=g.Id

ただし、Id フィールドは双方のリージョンにおいて Integer 型であるものとする。

しかし、もしドメインオブジェクト間の関係が、一対一 でなく、一対多である場合はどうであろうか。この場合、対象オブジェクト内で、Integer 型の List 構造として表現されるであろう。そうなると、OQL にて以下のような工夫をしないと、List と Integer の直接の結合は不可能である。

select * from /Groups g, g.privID pid, /Privileges p where p.Id=pid

コレクション系の構造を操作する一般原則は、FROM 節でコレクションに対するエイリアスを定義し、WHERE 述部で当該コレクションに含まれるフィールドにアクセスすることである。この OQL 文は、単純な Integer 型からなる Privilege リージョンの Id が、Group リージョンの Integer 型の List 構造に含まれるエントリーを返却することになる。

添付の zip ファイルには、実際に結合を行う 6 つの単純なクラスが含まれる。このサンプルを動かすには、以下の手順に従う。

  1. zip ファイルを展開し、STS にクラスをインポートする。
  2. ListJoinLocator クラスにおいて、GEMFIRE システムプロパティーを変更し、ローカルの GemFire インストール環境に合わせる。
  3. ListJoinLocator を起動する。
  4. ListJoinGemFireServer を起動する。
  5. リージョンにテストデータを生成するため、ListJoinDataPutter を起動する。
  6. 結合クエリーを実行するため、ListJoinQueryClient を起動する。

Java で設定を行っているため、cache.xml は不要である。サーバーログはプロジェクトのルートに直接記録される。

コメント

Powered by Zendesk