【发布时间】:2014-06-03 21:51:51
【问题描述】:
我有 2 个实体,它们之间有关系。
这两个实体都已创建并插入到数据库中。 在某些时候,用户有能力在它们之间建立联系。 当我尝试这样做时,我得到:
javax.persistence.PersistenceException:检测到尝试建立 WannaMeetUser("654321") 作为 WannaMeetUser("123456") 的父级,但是 WannaMeetUser("123456") 标识的实体已经被 在没有父母的情况下坚持。无法建立或更改父级 一旦一个对象被持久化。
这是一个传递关系(用户可以有很多朋友来自用户之王):
附上代码:
@Entity
public class WannaMeetUser {
@Id //signifies the primary key
@Column(name = "ID", nullable = false)
private Key id;
@ManyToMany
@Basic
private List<WannaMeetUser> userFriends = new ArrayList<WannaMeetUser>();
}
public void addFriendToWannaMeetUser(@Named("userId") String userId,
@Named("friendId") String friendId) {
EntityManager mgr = getEntityManager();
try
{
WannaMeetUser user = mgr.find(WannaMeetUser.class, WannaMeetServerUtils.getKeyFromString("WannaMeetUser", userId));
WannaMeetUser friend = mgr.find(WannaMeetUser.class, WannaMeetServerUtils.getKeyFromString("WannaMeetUser", friendId));
String coupleId = getcoupleId(userId.toString(), friendId.toString());
if (friend == null || user == null) {
throw new EntityNotFoundException("Object does not exist");
}
WannaMeetCouple couple=mgr.find(WannaMeetCouple.class, coupleId);
if (couple == null) {
couple = createCouple(userId.toString(), friendId.toString());
couple.setId(coupleId);
setUserJoined(couple, userId.toString(), friendId.toString(), true);
}
else {
if (isFriendAllready(couple, userId.toString(), friendId.toString()))
;
setUserJoined(couple, userId.toString(), friendId.toString(), false);
doAddFriend(user, friend, 10, 12321321);
mgr.persist(couple);
mgr.persist(friend);
mgr.persist(user);
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
mgr.close();
}
}
我的问题是建立这种关系的最佳方式是什么?
谢谢
【问题讨论】:
标签: java google-app-engine jpa