2012-01-12 22 views
0

給定數據存儲區ID,是否有辦法找出該ID的對象種類。或者我錯誤地認爲應用程序引擎中的ID是獨一無二的,我正在使用Java上的低級API。根據我的經驗在appengine中查找ID的種類

感謝 克拉斯

回答

2

ID對於給定種類和父實體而言是唯一的,而不是全局的,所以沒有辦法讓實體只給出ID。如果您不知道這種類型,則需要傳輸編碼的實體密鑰,而不僅僅是ID。

+0

謝謝,真的很高興知道。我將在此基礎上重新審視我的編碼。 – KlasE 2012-01-13 09:44:19

0

,你的假設是數據存儲區提供有效的,ID似乎是唯一的無論那種的。編輯: 對不起,我錯了。顯然,正如Nick在評論中所證實的那樣,只有在同一種類中,ID才被保證是唯一的,我的觀察僅適用於開發服務器中的實體。

但是,目前恐怕知道Kind與某個ID關聯的唯一方法是從數據存儲區加載實體並檢查getKind()值。

+0

謝謝,但我發現沒有辦法加載實體不知道這種。 KeyFactory需要Kind和Id來生成密鑰。有什麼想法嗎? – KlasE 2012-01-12 08:36:29

+0

啊,是的,那麼它就成爲了一個可以接受的22。那麼,我唯一想到的就是使用'DatastoreServiceFactory.getDatastoreService()。getIndexes()'來獲取你的應用程序的所有索引,使用每個索引中的'getKind()'並構造一組Kind,嘗試使用Kinds集加載實體,直到獲得返回結果的實體。 (醜陋的解決方法,我知道) – 2012-01-12 08:43:22

+0

是的,這將是一種解決方法,但相當無效。在我們的問題中,Kind kan可能是四種或五種已知類型之一,所以我們可以嘗試迭代這些類型,但即使這樣也會導致開銷。我曾希望忽略一些文檔,但可能無法做到這一點。 – KlasE 2012-01-12 08:52:38

0

如果您有一個實體密鑰,您可以使用getKind(它們實際上是解碼密鑰的一部分)獲得實物。

但是,您需要使用該種類才能使用KeyFactory.createKey從ID構建完整密鑰。