モデルのアノテーション@Modelと@Attribute
@Attributeの実装が終わったようです。
Google グループ
そして、サンプルプロジェクトTODOサービスも@Attributeに対応しました。
Google Code Archive - Long-term storage for Google Code Project Hosting.
- プロジェクト名:todo-s3-datastore ・・・ Slim3 Datastoreを使ったTODOリストサービス
@Modelはclassに対して設定するアノテーションでkindというプロパティを持っています。このプロパティを付けなければデータストアに格納されるKindはモデル名になり、kind = "Test"というふうに明示するとKindがTestとして登録されることになります。
@Attributeではプロパティの名前を指定出きるようになったみたいで。@Attribute(name = "abc")とすると、定義したフィールド名と違う名前で保存されるようですね。また、この@Attributeをつけない場合はデフォルトで永続化対象となります。
というところで、変更したTodoモデルは以下のようになってます。
@Model public class Todo { private static final long serialVersionUID = 1L; @Attribute(primaryKey = true) private Key key; @Attribute(persistent = false) private Category category; private String content; private Date createdAt; private Boolean done; // 略・・・
プライマリキーには「@Attribute(primaryKey = true)」こんな感じで設定しています。そして、永続化対象から外したいフィールドは「@Attribute(persistent = false)」といった感じ。ちなみに、このフィールドはCategoryという独自(StringとかDateとかじゃなく)のモデルなので、@Attributeアノテーションを付けないと、↓こんなエラーになる。Google App Engineでサポートされている型じゃないので、こういうエラーをSlim3-genが出してくれてる。
SILM3GEN1005] Specify @Attribute(lob = true) or @Attribute (persistent = false).
そして、このエラーの内容にしたがって永続化しないか、Blob(lob = trueにする)で保存するかを決める。
(Google App Engineで指定できるコアデータタイプは↓)
http://code.google.com/intl/ja/appengine/docs/java/datastore/dataclasses.html#Core_Value_Types
そして、@Attributeを指定してないフィールドはデフォルトで永続化対象ってことになります。
Blobとかバイトとかって単語を聞くとすぐ嫌になるけど、Slim3を使うとアノテーション付けるだけでシリアライズ、デシリアライズしてくるので楽ちんかも。さっきの永続化しないフィールドを下のようにするだけで、自動的にシリアライズして保存されるようになります。
@Attribute(lob = true) private Category category;
そして、以下のURLから
http://localhost:8080/_ah/admin/datastore
保存されてるかかくにーんと思ったらBlobはここには出てこないみたい。でもしっかり保存されてるようでした。