スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[GAE] データストア(JDO)の登録・更新・削除・取得のまとめ

PersistenceManagerクラス(PMF.java)を使ったデータストア操作のまとめ。

登録・更新・削除

PersistenceManager pm = PMF.get().getPersistenceManager();

// データの投入
MyBean bean = new MyBean();
pm.makePersistent(bean);

// データの更新
// 但し、子のKindを更新する場合は、親のKeyを含んだKeyを生成しないとダメぽ(・ω・)
MyBean bean = pm.getObjectById(MyBean.class, new Long(1234));
bean.setValue("xxxx");

// クエリで検索
javax.jdo.Query query = pm.newQuery(MyBean.class);
query.setFilter("id == id");
query.declareParameters("Long id");
List list= (List)query.execute(110011);

// データの削除
pm.deletePersistent(bean);

// 閉じる
pm.close();


Low Level API(com.google.appengine.api.datastore)の登録・更新・削除

// データの投入(更新もキーを同じにしてputする)
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Entity entity = new Entity("エンティティ名");
entity.setProperty("プロパティ名", "値(Object)"); // set(void)
entity.getProperty("プロパティ名"); // get(Object)
Key key = ds.put(entity);

// キー値からデータを取得
try
{
Key key = KeyFactory.createKey("エンティティ名", "キー値(Long/String)");
Entity entity = ds.get(key);
}
catch (EntityNotFoundException e)
{
// 見つからない場合
}

// クエリで検索
com.google.appengine.api.datastore.Query query = new Query("エンティティ名");
query.addFilter("プロパティ名", FilterOperator.EQUAL, "値(Object)");
PreparedQuery pq = ds.prepare(query);

// 件数
int count = pq.countEntities(FetchOptions.Builder.withDefaults());
int count = pq.countEntities(FetchOptions.Builder.withOffset(0).limit(Integer.MAX_VALUE));

// 一覧の取得(200行毎)
List list = ds.prepare(query).asList(FetchOptions.Builder.withLimit(200).chunkSize(200));

// 削除
Iterable entities = pq.asIterable();
for (Entity entity : entities)
{
ds.delete(entity.getKey());
}


キーの生成

String parentName = ParentBean.class.getSimpleName();
String childName = ChildBean.class.getSimpleName();

// 親子関係の子のKindのKeyを生成
Key parentKey = KeyFactory.createKey(parentName, new Long(1234L));
Key childKey = KeyFactory.createKey(parentKey, childName, new Long(1L));

// または
KeyFactory.Builder keyBuilder = new KeyFactory.Builder(parentName, new Long(1234L));
keyBuilder.addChild(childName, new Long(1L));
Key childKey = keyBuilder.getKey();


トランザクション

Transaction tx = pm.currentTransaction();
try
{
tx.begin();
pm.makePersistent(bean);
tx.commit();
}
finally
{
if (tx.isActive())
{
tx.rollback();
}
}


クエリ

Query query = pm.newQuery(MyBean.class);
query.setFilter("mailAddr == user");
query.declareParameters("String user");
query.setOrdering("mailAddr desc, userName asc");
query.setRange(5, 10);
List list = (List) query.execute("xxx@gmail.com");


PersistenceManagerインスタンスをクローズした後も使えるようにする。

// リスト
List list = (List) pm.detachCopyAll(list);
// 単品
MyBean bean = (MyBean) pm.detachCopy(bean);
関連記事
スポンサーサイト

Pagination

Trackback

Trackback URL

http://morado106.blog106.fc2.com/tb.php/82-22eadc30

Comment

Post Your Comment

コメント登録フォーム
公開設定

Utility

プロフィール

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。