java google ap引擎中的多对多关系

Mid*_*hat 4 java google-app-engine many-to-many jdo

我将如何在谷歌应用引擎中创建数据对象之间的多对多关系(使用jdo)

应用引擎页面谈论的是1-many和1-1但不是很多.任何代码示例都将受到高度赞赏

Cor*_*y D 8

通常对于许多人来说,你会做两个1人.并从应用程序引擎docs关系:

多对多关系我们可以通过维护关系两侧的密钥集合来建模多对多关系.让我们调整我们的例子,让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;
Run Code Online (Sandbox Code Playgroud)

在此示例中,Person维护一组Key值,这些值唯一地标识作为收藏夹的Food对象,而Food维护一组Key值,这些值唯一地标识被认为是最喜欢的Person对象.使用Key值建模多对多时,请注意应用程序有责任维护关系的两个方面:Album.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());
}
Run Code Online (Sandbox Code Playgroud)

请注意,除非Person.favoriteFoods中包含的Person实例和Food实例位于同一实体组中,否则无法在单个事务中更新此人和该喜欢的食物.如果将对象放在同一个实体组中是不可行的,那么应用程序必须考虑到一个人最喜欢的食物会在没有对食物的粉丝进行相应更新的情况下进行更新的可能性,或者反过来说,食物的一组粉丝如果没有对粉丝最喜欢的食物的相应更新,将会更新.