ラベル DataStore の投稿を表示しています。 すべての投稿を表示
ラベル DataStore の投稿を表示しています。 すべての投稿を表示

2011-12-16

ObjectifyでRelationShipを利用する

GAEのDataStoreはKVSのデータベースですので、RDBのようなリレーションがないと言われていますが、実際にはRelationshipという所有関係を定義することができます。Objectifyでは比較的容易に設定することができます。

サンプルの設定状況
サンプルプログラムの設定状況は下記の通りになります
  • ユーザを表現するPersonクラス
  • 車を表現するCarクラス
  • Carクラスはユーザ(Person)の情報を持つ
このことを頭にいれて以下を読んでください。

Entityクラスの記述方法
@Parentのアノテーションをつけるのがポイントです。
public class Car
{
    @Id Long id;
    @Parent public Key owner;
    String color;
}

public class Person
{
    @Id Long id;
    String name;
    int grade;
}
リレーションの登録
Keyを割り当てるのがポイントです。
//Personデータを登録し、そのKey情報を得る
Person p = new Person();
p.name="bob"; 
Key pKey = ofy.put(p);

//入手したKey情報を割り当てる
Car car = new Car();
car.id=(long)1002;
car.owner=pKey;
car.color="blue";
リレーションを利用した検索
色が青色の車のユーザを検索する方法は下記のようになります。
Car car = ofy.query(Car.class).filter("color", "blue").get();
Person p = ofy.get(car.owner);
ID情報をベタに管理するよりも簡単に検索することができますね。

2010-03-03

GAEデータストアで条件検索(JDO利用)

以下のサンプルは、データストアにあるUserテーブルのunivIDプロパティが"1234567"という文字列であるデータを検索する例です。下記のサンプル内で一部全角の「<>」を用いてますが、半角に直して下さい。


JDOQLのフル記述の場合
//JDOのマネージャーのインスタンス呼び出し
        PersistenceManager pm = PMF.get().getPersistenceManager();
        String query ="select from org.ochilab.server.user.User where univID=='1234567'";
        List<org.ochilab.server.user.user>result=(List<org.ochilab.server.user.user>pm.newQuery(query).execute();

JDOQLのところは以下のように書くことも可能です。
パラメータ変数で記述する場合
Query query = pm.newQuery(User.class,"univID == univIDParam");
        query.declareParameters("String univIDParam");
        List<org.ochilab.server.user.user>result= (List<org.ochilab.server.user.user>query.execute("1234567");

個人的には後者がよいかと思われます。なお、条件の指定には、下記の方法でもOKです。
Query query = pm.newQuery(Users.class);
     query.setFilter("univID == univIDParam");
     query.declareParameters("String univIDParam");

条件を複数にする場合は、上記、setFilter()の条件を&&で結び、declareParameters()ならびに、query.execute()の各引数を複数にすればOKらしいです。

2010-02-23

GAEのデータストアを試してみた

GAEのデータストアについては、サンプルプログラムでは動かしてみたことはあるのだが、開発中のシステムへの利用を前提にちょっと動かしてみた。今日はそのメモ書き。。。。

ローカルでのGAE管理コンソール

http://localhost:8080/_ah/admin
でアクセスできます。データベースの中身も見れます。

データストアのIDについて
IDについてはなんでもいいのではなく、どうやら型に制約があるらしい。
  • Longクラス ← longではなくLongね
  • Stringクラス
  • Keyクラス


IDの自動生成について
いちいちIDをアプリケーション側で生成するのが面倒な場合は、GAEに任せるという手がある。

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Long id;


参考URL