2009-09-03 88 views

回答

8

通常對於許多人來說,你會做兩個1人手。而從app engine docs on relationships

許多一對多關係 我們可以通過對關係的雙方維護鍵的集合建模許多一對多的關係。讓我們調整我們的例子,讓食物保持這種認爲這是一個最喜歡的人的軌跡:

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; 

在這個例子中,個人認爲唯一識別是我的最愛的食物對象鍵值的設置, Food維護一組Key值,這些值唯一地標識了認爲它是最喜歡的Person對象。 當建模一個多到許多使用密鑰值,要知道,它是應用程序的責任來維護關係的雙方: 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()); 
} 

注意,除非Person的一個實例, Person.favoriteFoods中包含的食品實例屬於同一個實體組,因此無法在單次交易中更新人員和最喜歡的食品。如果將同一個實體組中的對象置於同一個位置是不可行的,那麼應用程序必須說明一個人最喜歡的食物會在沒有相應更新食物的粉絲羣的情況下更新,或者相反,一個食物的粉絲羣將會在沒有相應更新粉絲喜愛的食物的情況下進行更新。

3

This page有關於多對多的信息。它不在TOC中,但您可以通過搜索「多對多」來找到它。

我們可以通過維護關係兩邊的密鑰集合來建立多對多關係。讓我們調整我們的例子,讓食物保持這種認爲這是一個最喜歡的人的軌跡:

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;