我注意到在使用數據存儲時在Google應用引擎上分配ID時遇到問題。在我的應用程序中,我有一組必須首先上傳的數據。數據已在測試appengine環境中準備好,因此它已爲ID字段自動生成值。由於我想保留這些值,我正在通過使用Objectify的遠程API作爲單獨的進程來重新創建實體。上傳後,我想確保已使用的ID將從自動生成器的值範圍中刪除。我使用DatastoreService.allocateIdRange與單個長值的範圍。一切工作正常dev服務器上,但在appspot的一些值(16位數值)我收到「超過最大分配的ID」IllegalArgumentException。GAE:分配16位ID時出現異常
allocateIdRange調用是否有任何限制(我在文檔中找不到)?
下面是上傳後,我用爲數據存儲ID分配的示例代碼:
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
String kind = Key.getKind(clazz);
PreparedQuery query = datastore.prepare(new Query(kind).setKeysOnly());
KeyRange keyRange = null;
Long id = null;
for (Entity entity : query.asIterable()) {
id = (Long) entity.getKey().getId();
keyRange = new KeyRange(null, kind, id, id);
DatastoreService.KeyRangeState state = datastore.allocateIdRange(keyRange);
}
感謝您的回答,但我使用的是之前由GAE生成的ID,並且小於2^53。 – user3482048
嗯。我建議您在App Engine網站上提交生產許可證,以便您可以提供您的應用ID,並且有人可以更深入地查看您的應用:https://code.google.com/p/googleappengine/issues/entry?模板=製作%20issue –