2016-02-12 31 views
0

我試圖實現多對一的關係。我打算將一個模型的一組鍵(數據存儲實體鍵)存儲在另一個模型的實體中,如List<String>在Google App Engine DataStore(Java)中存儲和搜索字符串數組

例如假設模型A的4個實體(a1,a2,a3,a4)分別具有數據存儲密鑰:key1,key2,key3和key4。現在我存儲一個模型B的實體,其名稱爲「ID」的屬性爲List<String>。 「id」具有這些String作爲元素:key1,key2,key3和key4。

它一切都很好,直到現在。 但是,我現在如何查詢每個這些ID的模型B?

我想要做的是這樣的:

query.setFilter(FilterOperator.EQUAL.of(ids,"key1"))

很明顯,這不能立即完成。 現在我正在做的是獲取每個B實體的ids屬性,然後手動反序列化成一個字符串列表,然後檢查密鑰是否存在。

正如你所看到的,這是非常低效的。我應該怎麼辦?我應該將這些映射存儲在單獨的模型中。我不想處理連接,但如果我現在的解決方案不能得到其他任何東西,我將不得不處理。

我沒有使用JPA或JDO,我打算不使用它們。

任何幫助,將不勝感激。

+0

請參閱: http://stackoverflow.com/questions/30733825/google-datastore-multiple-values-for-the-same-property – Robert

回答

0

帶有EQUAL過濾器的查詢對於值列表正常工作。確保在執行此查詢時傳遞正確的值。

例如,如果您只在服務器端使用此實體,則可以存儲List。

如果您在客戶端需要此列表,並且您始終存儲相同類型實體的密鑰,則可以存儲用於創建這些密鑰的ids(List)或'names`(List)的列表。這將佔用更少的空間。

+0

感謝您的答案。你能告訴我關於爲一個值搜索這種多值屬性的效率嗎? gae如何處理它? –

+0

這與查詢單個值的速度一樣快。唯一需要注意的問題是,此列表中的每個值都會爲涉及此屬性的每個複合索引生成一個額外條目。如果您使用包含此屬性的許多組合索引,則它可能會變得非常昂貴。 –

相關問題