0

プロファイル、いいね、場所のエンティティがあります

場所にはいいねがあります。Likesには、場所とプロファイルへの参照があります。

場所はいいねに1-Nの関係があります

@PersistenceCapable
public class Place {

    @Persistent(mappedBy = "place")
    @Element(dependent = "true")
    private transient List<Like> likes;  

Likeはプロファイルへの参照とPlaceへの参照を持っています

@PersistenceCapable
public class Like implements Serializable {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent
    private Profile profile;    

    @Persistent
    private Place place;

そして、プロファイルクラスはこのオブジェクトとは関係がありません

@PersistenceCapable
public class Profile {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private transient Key key;

Like to Place既存の場所を既存のプロファイルに追加する最良の方法は何ですか?

私はそれを行うために次のコードを使用します:

    Profile profile;
    Place place;
    List<Like> likes;
    pm = PMF.get().getPersistenceManager();
    try {   
        place = pm.getObjectById(Place.class, placeId);
        likes = place.getLikes();
        profile = pm.getObjectById(Profile.class, KeyFactory.createKey(Profile.class.getSimpleName(), login));
    } finally {
        pm.close();
    }

    likes.add(new Like(place, profile));
    place.setLikes(likes);

    pm = PMF.get().getPersistenceManager();
    try {   
        pm.makePersistent(place);
    } finally {
        pm.close();
    }   

プロファイルエンティティの複製があります。それを修正する方法はありますか?

4

1 に答える 1

1

Placeのようなものに新しいLikeを追加する場合は、トランザクションでオブジェクトを取得するという面倒な作業をすべて行ってから、PMを閉じて(JDO仕様に従ってオブジェクトが一時的になるように)なぜですか?ただ言うのが理にかなっているだろう

place.getLikes().add(new Like(place, profile));

まだトランザクション中です。実際、オブジェクトのライフサイクルについて読むことは、永続性仕様(JDOまたはJPA)を使用するすべての人にとって前提条件となるはずです。明らかに、上記はGAEに固有のものでもありません。

于 2012-08-20T16:03:16.370 に答える