0

我有实体 Profile、Like 和 Place

地方有喜欢。喜欢有参考地点和个人资料。

地点在喜欢上具有 1-N 关系

@PersistenceCapable
public class Place {

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

Like 有参考 Profile 和参考 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;

使用现有配置文件添加“喜欢”以放置现有地点的最佳方式是什么?

我使用以下代码来做到这一点:

    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();
    }   

并且有 Profile 实体的副本。有办法解决吗?

4

1 回答 1

1

如果您要向 Place 之类的对象添加新的 Like,为什么还要费尽心思在事务中检索对象,然后关闭 PM(这样对象就会变成瞬态的,根据 JDO 规范)?只是说会更有意义

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

同时还在交易中。事实上,阅读对象生命周期应该是任何使用任何持久性规范(JDO 或 JPA)的人的先决条件。显然,上述内容也不特定于 GAE。

于 2012-08-20T16:03:16.370 回答