2013-02-18 59 views
3

的GAE,JDO文檔表明,它可以從子鍵檢索父鍵:GWT:解密GAE-JDO鍵進入母體

還要注意一個關鍵的字符串表示未加密:用戶可以解碼密鑰字符串以提取其組件,包括實體及其祖先的種類和標識符。

REF:使用"Entities, Properties, and Keys"

我生成密鑰以下:

@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true") 
private String id; 

當檢查數據存儲,我的實體按鍵如下所示:

parent.id = agpzfnZpdmVlbGFichQLEgdTZXNzaW9uGICAgICgwMsIDA 
child1.id = agpzfnZpdmVlbGFiciYLEgdTZXNzaW9uGICAgICgwMsIDAsSBVN0YWdlGICAgICAwK8KDA 
... 

(其中父母有子類型的孩子)。所以,我要找的是一個GWT功能是這樣的:

String getParentIdFromChildId(String childId) { 
    String parentId = ...   
    return parentId; 
} 

因此從客戶端(GWT)我可以引用子對象(通過首先找到它的父):

Child child = data.getParent(getParentIdFromChildId(childId)).getChild(childId); 

我可以通過跟蹤父ID來解決這個問題,但是如果父信息已經嵌入到子ID中,則效率不高。

在此先感謝。

〜歐文

+0

你找到的算法或程序做,在Java或Python?如果是這樣的Java版本應該直接在GWT工作,或者應該很容易端口。 – 2013-02-19 12:14:56

+0

不,還沒有找到如何在Java或Python中做到這一點。 – opowell 2013-02-19 15:30:43

+0

似乎孩子ID是由一個附加到父親的字符串組成的,如果該模式是兒童ID在一個固定的位置開始,算法是微不足道的,但我不相信。嘗試尋找更多文檔或使用更多密鑰。 – 2013-02-19 20:14:06

回答

1

child1.getParent()返回實體child1的父的關鍵。

所以,如果你有一個實體child1,並且希望其父的身份證,只要致電:

String parentId = child1.getParent().id; 

返回它的父的ID。

更多在這裏閱讀: Entity 'getParent()' Method Documentation

不知道如果這是你想要的,但是這是我會怎麼做。

感謝,

〜薩米爾

+0

您的解決方案適用於App Engine - 我需要GWT解決方案。 – opowell 2013-06-12 09:51:50