我有实体个人资料,喜欢和放置
地方有喜欢。 喜欢参考地点和简介。
地方有喜欢的1-N关系
@PersistenceCapable
public class Place {
@Persistent(mappedBy = "place")
@Element(dependent = "true")
private transient List<Like> likes;
喜欢引用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;
添加Like以使用现有个人资料放置现有位置的最佳方法是什么?
我使用以下代码执行此操作:
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实体的副本。有办法解决吗?
答案 0 :(得分:1)
为什么要解决在事务中检索对象的所有问题,然后关闭PM(因此,根据JDO规范,对象变为瞬态)如果您要添加一个新的Like喜欢Place?只会说
会更有意义place.getLikes().add(new Like(place, profile));
仍在交易中。实际上,阅读关于对象生命周期应该是使用任何持久性规范(JDO或JPA)的任何人的先决条件。显然,上述内容并非特定于GAE。