JDO unowned 多对多关系
JDO unowned many to many relationship
我正在使用 JDO 在 Google App Engine 中创建一个 Cloud Endpoint。我有两个实体。用户实体包含一个组列表。组实体包含一个成员列表,这些成员是用户实体。
用户实体:
@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 会创建圈子拥有的用户实体并设置关系,但这不是我想要的行为。我希望我可以设置与现有用户实体的关系。
管理无主多对多关系的最简单方法是在关系的两侧保存一组键(参见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());
}
我正在使用 JDO 在 Google App Engine 中创建一个 Cloud Endpoint。我有两个实体。用户实体包含一个组列表。组实体包含一个成员列表,这些成员是用户实体。
用户实体:
@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 会创建圈子拥有的用户实体并设置关系,但这不是我想要的行为。我希望我可以设置与现有用户实体的关系。
管理无主多对多关系的最简单方法是在关系的两侧保存一组键(参见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());
}