Low-Level APIを使ってデータ・ストアを検索する
2. エンティティ検索のサンプル
以下からは、エンティティ検索・参照のサンプル・プログラムを解説します。App Engineデータ・ストアにおける検索・参照処理は、
- キー検索でのデータ検索
- Queryオブジェクトを使用した条件検索
の2種類で行うことができます。最初に、キー検索の方法を解説します。
2.1. キー検索
(1)ルート・エンティティに対するキー検索
キー検索の最も典型的な方式は、ルート・エンティティに対するキー検索です。ここでのサンプルでは、テーブル(kind)を親子(所有・被所有)関係で構成していますが、一般には親子関係を構成しないでテーブルを使用する場合も多く、このような場合のキー検索は、必然的にルート・エンティティに対するキー検索になります。つまり、普通にテーブルを作成して検索する場合は、ルート・エンティティに対するキー検索になります。
【リスト1】: ルート・エンティティに対するキー検索
リスト1は、ルート・エンティティに対するキー検索のサンプルです。最初のimport文には前回説明したトランザクション処理用のパッケージも含まれていますが、全サンプルに共通するため、このあとのサンプルでは省略します。また、DatastoreServiceのインスタンスであるdsの生成についても、以後は省略します。
リスト1のキー検索では、
- (1)createKeyの第1引数にkind名、第2引数にキー名をして、キーを生成します。
- (2)ds(DatastoreServiceのインスタンス)のgetメソッドで、引数に(1)のキーを指定して実行します。
これで、キー指定されたエンティティが取得できます。このように、キー検索によってエンティティを取得するのは簡単です。後は、(3)のように、取得したエンティティ(omas)から、getPropertyメソッドを使ってプロパティ値を取得します。最後に(4)で、JSONフォーマットに変換してクライアントに送信します。
今回は、データ検索のサンプルが多いため、クライアント側の画面表示は解説しませんが、第1回で紹介したDWR(Direct Web Remoting)を使えば、クライアント・サーバー間でのデータ送受信を確認できます。
画面1: DWRのメソッド実行画面 |
画面2: DWRでの実行結果 |
画面1は、DWRのメソッド実行画面です。この画面上でキー「omas001」を指定して「Execute」ボタンをクリックすると、Webクライアントに送信されるデータが表示されます(画面2)。なお、検索で使うordMasテーブル(kind)は、次のような内容になっています。
画面3: ordMasのエンティティ項目 |
2.2. 被所有エンティティのキー検索
【リスト2】: 被所有エンティティのキー検索(revShopMas1)
被所有、つまり親を持つエンティティをキー検索する場合は、ルート・エンティティでキーを指定する必要があります。リスト2では、(1)でルート・エンティティのキーを取得しています。(2)では、取得したキーをcreateKeyの第1引数に指定して、検索キー(skey)を取得しています。このサンプルでは、検索するエンティティがルート・エンティティ直下のエンティティになっていますが、さらにその下の子エンティティと続く場合は、このような連鎖処理を続ける必要があります。
画面4: revShopMas1での検索結果 |
画面4は、revShopMas1の検索結果です。引数にordMasテーブル(ルート・エンティティ)のキー「omas001」とshopMasテーブルのキー「akiba01」を指定して、キー検索結果(受注金額=ordamt)を表示しています。