しかし、システムの環境としてBlazeDSを使っていたので、ActionScriptが展開できる型にKey型がなく問題に。ふむー。
ちなみにActionScriptとJavaで互換性のあるデータタイプの一覧はこちら。
→Explicitly mapping ActionScript and Java objects
よってKey型をやめ、String型をメインに使うように仕様を変更し、encoded-pk属性を追加。
また、データ登録時に主キーにユニークな値を設定してほしいので、IdGeneratorStrategy.IDENTITYの設定も有りにして、以下のような構成になった。
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class Parent{
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
 private String parentId;
//以下アクセッサー
}
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class Child {
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
 private String childId;
 // 親キーIDを格納するプロパティ
 @Persistent
 @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
 private String parentId;
//以下アクセッサー
}
これからはBlazeDSとの互換性の意味でも、このような主キー、親キーの設定方法でいこう。それにしても、Kindの形をドンドン変えられるというのはスゴイ。これまでのRelational DataBaseでは考えられない拡張性だ。フィールドの追加も型の変更も、オンザフライでドンドン変えられる。この体験はまさに別世界だなー。この環境を与えてくれたGoogleに感謝!
いやぁ〜,これまでのリレーショナルデータベースはテーブルを少し変えるだけでも精神的に相当ストレスに思ってましたが,これくらい気軽にできると,どんどんリファクタリングする気になりますね。
返信削除Googleはまさにイノベーションを起こしてると思います。やっぱスゴいですね。