gpt4 book ai didi

java - JDO 无主多对多关系

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:53 24 4
gpt4 key购买 nike

我正在使用 JDO 在 Google App Engine 中创建云端点。我有两个实体。用户实体包含组列表。组实体包含作为用户实体的成员列表。

用户实体:

@PersistenceCapable(identityType = IdentityType.APPLICATION) public class USER {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Key userid;

@Persistent
String name;

@Persistent
private Set<GROUP> groups; //getters setters

群组实体

@PersistenceCapable(identityType = IdentityType.APPLICATION) public class GROUP {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Key groupid;

@Persistent
String name;

@Persistent
private Set<USER> members; //getters setters

我的API方法

@ApiMethod(name = "INSERT_CIRCLE")
public wmcircle insertcircle(CIRCLE circle) {
PersistenceManager mgr = getPersistenceManager();
try {
if (contains(circle)) {
throw new EntityExistsException("Object already exists");
}

mgr.makePersistent(circle);
} finally {
mgr.close();
}
return circle;
}

当我创建一个组时,GAE 会创建该圈子拥有的用户实体并设置关系,但这不是我想要的行为。我希望我可以设置与现有用户实体的关系。

最佳答案

管理无主多对多关系的最简单方法是在关系双方保存 key 集合(请参阅 GAE JDO Documentation )。因此,在您的情况下,实体将如下所示:

用户

...
@Persistent
private Set<Key> groups;

//getters setters

public void addGroup(Group group) {
groups.add(group.getKey());
group.getMembers().add(this.getKey());
}

public void removeGroup(Group group) {
groups.remove(group.getKey());
group.getMembers().remove(this.getKey());
}

...
@Persistent
private Set<Key> members;

//getters setters

public void addMember(User member) {
members.add(member.getKey());
member.getGroups().add(this.getKey());
}

public void removeMember(User member) {
members.remove(member.getKey());
member.getGroups().remove(this.getKey());
}

关于java - JDO 无主多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com