2015-12-09 50 views
1

我使用物化和谷歌雲數據存儲。Objectify - 一個給定的父母的所有孩子

我正在尋找一種讓所有孩子(沒有特定類型或種類)父母的方法。

我知道祖先的功能。

我用這個

ofy().load().ancestor(entity).list(); 

這讓所有的孩子和孫子(我不希望它)。

在本例,A是1,2和3 1的父

 
    A 
/| \ 
1 2 3 
|  
m  

我想要的數據m的父{2 1,...,3}不{1,2 ,3,m}

你知道一種更準確的結果嗎? (沒有孫子)

回答

2

有沒有優雅的解決方案,我懷疑你在濫用@Parent。應該是非常,很少想要在數據存儲中創建grand @ Parent關係。數據存儲中的大多數分層關係最好用傳統的外鍵關係來表示。

但是,如果你確定,一種解決方案是使1,2和3所有同一種類型的多態對象。所以,你可以查詢這樣的:

ofy().load().type(BaseType.class).ancestor(parent) 

有類型的查詢的另一個優點是,你現在可以使用過濾器(無類型查詢不能有過濾器):

ofy().load().type(BaseType.class).ancestor(parent).filter("arbitraryField", value) 

另一種選擇如果您希望排除的值很少,則只需將其取出並將其過濾掉即可。

0

我認爲唯一的方法是創建一個指數和parent屬性使用過濾。 @parent將父鍵添加爲子鍵的一部分,所以本質上你將得到所有的下降,除了要過濾的類型之外沒有簡單的方法。

+0

好的。在這種情況下,我不知道父字段的名稱。我如何應用過濾器? 我的意思是所有的孩子都有一個父母的財產,但他們沒有相同的名字。 同樣的例子。如果在實體1中,父項稱爲「父項」,但在實體2中稱爲「parentA」 – Michael

+0

您是對的,所以我沒有簡單的解決方案。對我而言,唯一的方法是由祖先進行查詢並通過反射來檢查屬性是否等於父對象以刪除孫輩 –

+0

您不能在@ @ Index''@ Parent'字段中。 「@ Parent」字段不是真正的屬性,它們是關鍵的一部分。 – stickfigure

相關問題