読者です 読者をやめる 読者になる 読者になる

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;