0

我在HRD谷歌應用引擎數據存儲中使用嵌套實體組。HRD數據存儲中的嵌套實體組

甲<乙<Ç考慮X < Y表示的是X爲Y

的父是否所有C中的相同的實體組(A之一)在?

我想查詢所有具有相同父母A的C,我該怎麼做?

此失敗: SELECT * FROM C其中ANCESTOR IS密鑰( 'A',1)

任何提示?

測試已在數據存儲中直接完成在GQL,無論,附上的代碼段(Ofy4代碼):

即答:

@Entity 
@Cache 
public class Site implements Serializable { 
    private static final long serialVersionUID = 8611281648072797702L; 

    @Id 
    private Long id; 
    private String url; 
    ... 
} 

即B:

@Entity 
@Cache 
public class Accom implements Serializable, HasCapacity { 

    @Id 
    private Long id; 
    @Parent 
    private Key<Site> site; 
    ... 
} 

即C:

@Entity 
@Cache 
public class Room implements Serializable, HasCapacity { 

    @Id 
    private Long id; 
    @Parent 
    private Key<Accom> accom; 
    ... 
} 
+0

它以什麼方式'失敗'?它是拋出一個異常,還是它沒有返回你知道的實體在數據庫中的實體?還有別的嗎? – 2012-03-19 17:18:15

+0

添加到Adam所說的內容:您可以在執行查詢和堆棧跟蹤的位置發佈代碼片段(如果「失敗」是例外) – alex 2012-03-19 17:44:20

+0

沒有失敗。該代碼沒有返回任何結果。我直接在產品中使用GQL進行測試。 – 2012-03-19 19:23:41

回答

2

根據谷歌文檔,這應該工作。

http://code.google.com/appengine/docs/python/datastore/queries.html

祖先查詢

您可以過濾你的數據存儲區查詢到指定的祖先,這樣的結果只包含包含祖先的實體。換句話說,所有的結果都將祖先作爲他們的父母或父母的父母或其他等等。將None作爲參數傳遞不會查詢沒有祖先的實體,並且會返回錯誤。

與有用的信息其他鏈接: http://code.google.com/appengine/docs/python/datastore/gqlreference.html#Examples http://code.google.com/appengine/docs/python/datastore/entities.html

+0

我認爲相同,但它不:( – 2012-03-19 15:59:55

0

問題解決了:

問題時創建了C父鍵被錯誤地創建。 C的父鍵是K(B),它應該是K(A,B)總是包含父項。

就是這樣,實體組可以被引用。由於儘管嵌套只有一個實體組,所以需要引用A.