java - 如何按添加位置从数据存储中获取条目? (Google 应用引擎和 JDO)

标签 java google-app-engine google-cloud-datastore jdo

这是我的例子:
将新条目添加到数据存储//位置 1
将新条目添加到数据存储//位置 2
将新条目添加到数据存储//位置 3

现在我想要获取在位置 2 添加的条目。如何使用 Google 应用引擎和 JDO 来完成此操作?

在我看来,一种方法是将 PrimaryKey 作为 Long ID,然后使用 getObjectById。所以长ID将等于数据存储自动存储位置。
显示它的代码:

import javax.jdo.annotations.*;
import javax.jdo.PersistenceManager;
import mypackage.PMF

public class Entry {
  @PrimaryKey
  @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
  private Long ID;

  //.. other fields
}


// create entries (suppose datastore is empty and i don't need deletes in future)
PersistenceManager pm = PMF.get().getPersistenceManager()
for(int i=0; i<10; i++){
  pm.makePersistent(new Entry());
}
// created entries have their IDs exaclty = 1,2,3,4,5,6,7,8,9,10 ?

// fetch entry, that was added second
Key entryKey = KeyFactory.createKey(Entry.class.getSimpleName(), 2L);
Entry secondEntry = pm.getObjectById(Entry.class, entryKey);  

我能否确定长 ID 字段对于新条目始终会增加 1,并且对于第一个条目等于 1? 或者还有其他更好的方法? :)

最佳答案

这种“位置”概念不是 App Engine 概念。 App Engine 不保证系统生成的 ID 将按顺序无间隙地分配。

参见http://code.google.com/appengine/docs/java/datastore/entities.html#Kinds_IDs_and_Names

如果您小心的话,您可以自己接管 ID 分配,但是,根据您的应用及其使用模式,创建您自己的 ID 会引入瓶颈,从而限制您快速创建新实体的能力。

关于java - 如何按添加位置从数据存储中获取条目? (Google 应用引擎和 JDO),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6525213/

相关文章:

google-app-engine - 将实体放入 Google App Engine 数据存储区时 bool 值始终为假 - Golang

google-app-engine - Google App Engine appcfg.py 显示每个命令的帮助消息

python - put() 后 App Engine 数据存储中的读取延迟

java - 如何修复 spring-boot 中的 CORS Cross Origin 错误?

java - 如何从两个表中选择同一字段中具有相同值的行?

Java - 如何从集合中删除具有相同属性值的元素?

java - 下载 GAE 源代码时出现 400 Bad Request 错误

java - Selenium 和 xpath : finding a div with a class/id and verifying text inside

java - 如何在 Android 中使用 JSON 引擎

google-app-engine - Google App Engine Datastore (ndb) 中的多对多关系