【发布时间】:2023-03-18 22:26:01
【问题描述】:
我将如何在谷歌应用引擎中的数据对象之间创建多对多关系(使用 jdo)
应用引擎页面谈论 1-many 和 1-1 但不是 many-many。任何代码示例都将受到高度赞赏
【问题讨论】:
标签: java google-app-engine many-to-many jdo
我将如何在谷歌应用引擎中的数据对象之间创建多对多关系(使用 jdo)
应用引擎页面谈论 1-many 和 1-1 但不是 many-many。任何代码示例都将受到高度赞赏
【问题讨论】:
标签: java google-app-engine many-to-many jdo
通常,对于多对多,您会做两个 1-many。并来自app engine docs on relationships:
多对多关系 我们可以通过维护关系两边的键集合来建模多对多关系。让我们调整我们的示例,让 Food 跟踪将其视为最爱的人:
Person.java
import java.util.Set;
import com.google.appengine.api.datastore.Key;
// ...
@Persistent
private Set<Key> favoriteFoods;
Food.java
import java.util.Set;
import com.google.appengine.api.datastore.Key;
// ...
@Persistent
private Set<Key> foodFans;
在此示例中,Person 维护一组 Key 值,用于唯一标识最喜欢的 Food 对象,而 Food 维护一组 Key 值,用于唯一标识将其视为最爱的 Person 对象。 使用 Key 值对多对多建模时,请注意,维护双方关系是应用程序的责任: 专辑.java
// ...
public void addFavoriteFood(Food food) {
favoriteFoods.add(food.getKey());
food.getFoodFans().add(getKey());
}
public void removeFavoriteFood(Food food) {
favoriteFoods.remove(food.getKey());
food.getFoodFans().remove(getKey());
}
请注意,除非 Person.favoriteFoods 中包含的 Person 实例和 Food 实例位于同一实体组中,否则无法在单个事务中更新人和该最喜欢的食物。如果将对象放在同一实体组中是不可行的,则应用程序必须考虑到一个人最喜欢的食物会在没有相应更新食物的粉丝集的情况下更新的可能性,或者相反,食物的粉丝集将在没有相应更新粉丝最喜欢的食物的情况下更新。
【讨论】:
This page 有关于多对多的信息。它不在 TOC 中,但您可以通过搜索“多对多”找到它。
我们可以通过维护关系两边的键集合来模拟多对多关系。让我们调整我们的示例,让 Food 跟踪将其视为最爱的人:
Person.java
import java.util.Set;
import com.google.appengine.api.datastore.Key;
// ...
@Persistent
private Set<Key> favoriteFoods;
Food.java
import java.util.Set;
import com.google.appengine.api.datastore.Key;
// ...
@Persistent
private Set<Key> foodFans;
【讨论】: