以下のように@Extensionのアノテーションを使って簡単にリレーションを作っていた。
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class Parent{
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Long parentId;
//以下アクセッサー
}
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class Child {
 @PrimaryKey
 @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
 private Key childKey;
 // 親キーIDを格納するプロパティ
 @Persistent
 @Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
 private Long parentId;
//以下アクセッサー
}
必ずKey型でないといけない~みたいなドキュメントがなかったので、StringかLongでもいけるかなと、この場合はLongを指定していた。そうしたら以下のようなExceptionが出た。
javax.jdo.JDOFatalUserException: Error in meta-data for hoge.Child.parnetId: Parent pk must be of type String or com.google.appengine.api.datastore.Key.なるほどですね。
StringやKeyはOKだけどLongはNGなのですね。
0 件のコメント:
コメントを投稿