GAE/JのJDOではまり中(2)
id:higayasuoさんのコメントへの回答
slim3.hotReloadingをfalseにしたらエラーがなくなりました。
trueだとエラーが出るようです。(hotReloading部分のソースも読まないと・・・)
GAE/JのJDOではまり中 - あおうさ@日記のコードを下記に記載します。
変なことしてたら突っ込みお願いします。
親子のモデル
import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import com.google.appengine.api.datastore.Key; @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true") public class Oya implements Serializable { /** Serial Version */ private static final long serialVersionUID = -8926450160597347164L; @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key key; @Persistent private String date; @Persistent(mappedBy = "oya") private List<Kodomo> kodomoList = new ArrayList<Kodomo>(); @Persistent private Date createdAt; ・・・ import java.io.Serializable; import java.util.Date; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import com.google.appengine.api.datastore.Key; @PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true") public class Kodomo implements Serializable { /** Serial Version */ private static final long serialVersionUID = 8750826671467387059L; @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key key; @Persistent private Oya oya; @Persistent private Long fooId; @Persistent private Boolean isXyz = false; @Persistent private Date createdAt; ・・・
JDOControllerで登録している部分
Oya oya = new Oya(); Kodomo ko = new Kodomo(); ko.setFooId(1); oya.getKodomoList().add(ko); ko.setOya(oya); makePersistentInTx(oya);
いまいちわかってないところ@PrimaryKey
KodomoのPKは下記Keyではなく本当はLongにしたかった。
以前検証したときにGAEのバグ?なのかKodomoもKeyを使わないとだめぽかった。
@PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Key key;
slim3itでは下記のようにgae.encoded-pkを使用しているが、その利点がよくわからない。
gae.encoded-pkがおすすめでしょうか?
@PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) @Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true") private String key;