2013-08-25 49 views
1

我剛剛開始使用Azure移動服務。我正在設置我的數據庫。但我不知道我將如何處理一對多/多對多的關係。 Azure Mobile並沒有提供這方面的支持,所以我不確定還有什麼要做。一種方法是將外鍵ID存儲在特定實體中,然後在該表上運行查詢以獲取與特定ID匹配的所有項目。我認爲這可能有點太費時。不確定。任何建議或見解如何做到這一點。 我不得不求助於用JavaScript在後端創建某種形式的邏輯來創建服務器端的實際關係嗎?如何支持與Azure移動服務的一對多關係Android

回答

2

使用AMS for Android支持一對多關係的一種方法是創建ArrayList並將外鍵/ ID存儲在特定表中。然後,ArrayList將包含要檢索的相關實體的ID,因此您只需檢索該數組並提取ID即可。 AWS目前不支持ArrayList的序列化和反序列化,因此您需要編寫自定義序列化程序來實現此目的。這可以通過使用GSON完成。這是一個例子。

public class CollectionSerializer<E> implements JsonSerializer<Collection<E>>, 
    JsonDeserializer<Collection<E>> { 

public JsonElement serialize(Collection<E> collection, Type type, 
          JsonSerializationContext context) { 
    JsonArray result = new JsonArray(); 
    for(E item : collection){ 
     result.add(context.serialize(item)); 

    } 

    return new JsonPrimitive(result.toString()); 
} 


@SuppressWarnings("unchecked") 
public Collection deserialize(JsonElement element, Type type, 
           JsonDeserializationContext context) throws JsonParseException { 
    JsonArray items = (JsonArray) new JsonParser().parse(element.getAsString()); 
    ParameterizedType deserializationCollection = ((ParameterizedType) type); 
    Type collectionItemType = deserializationCollection.getActualTypeArguments()[0]; 
    Collection list = null; 

    try { 
     list = (Collection)((Class<?>) deserializationCollection.getRawType()).newInstance(); 
     for(JsonElement e : items){ 
      list.add((E)context.deserialize(e, collectionItemType)); 
     } 
    } catch (InstantiationException e) { 
     throw new JsonParseException(e); 
    } catch (IllegalAccessException e) { 
     throw new JsonParseException(e); 
    } 

    return list; 
} 
} 

完成此操作後,將其添加到您創建的MobileServiceClient實例。

mClient.registerSerializer(ArrayList.class,new CollectionSerializer<Object>());