Java 如何按添加位置从数据存储中获取条目?(谷歌应用引擎和JDO)
下面是我的例子:Java 如何按添加位置从数据存储中获取条目?(谷歌应用引擎和JDO),java,google-app-engine,google-cloud-datastore,jdo,Java,Google App Engine,Google Cloud Datastore,Jdo,下面是我的例子: 将新条目添加到数据存储//位置1 将新条目添加到数据存储//位置2 将新条目添加到数据存储//位置3 现在我想进入第二个位置。如何使用google app engine和JDO实现这一点 在我看来,一种方法是将PrimaryKey作为长ID,然后使用getObjectById。如此长的ID将等于数据存储自动存储位置。 显示它的代码: import javax.jdo.annotations.*; import javax.jdo.PersistenceManager; impo
将新条目添加到数据存储//位置1
将新条目添加到数据存储//位置2
将新条目添加到数据存储//位置3 现在我想进入第二个位置。如何使用google app engine和JDO实现这一点 在我看来,一种方法是将PrimaryKey作为长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);
import javax.jdo.annotations.*;
导入javax.jdo.PersistenceManager;
导入mypackage.PMF
公开课入学{
@主键
@持久性(valueStrategy=IdGeneratorStrategy.IDENTITY)
私人长ID;
//…其他领域
}
//创建条目(假设数据存储为空,我以后不需要删除)
PersistenceManager pm=PMF.get().getPersistenceManager()
对于(int i=0;i而言,“位置”的概念不是应用程序引擎的概念。应用程序引擎不保证系统生成的ID将按顺序分配,且没有间隔
看
如果你小心的话,你可以自己接管ID分配,但是,根据你的应用程序及其使用模式,创建自己的ID会带来瓶颈,这将限制你快速创建新实体的能力。“位置2”基于什么?你必须有一些基于它的属性。如果你指的是ID,这不是你说的,那么你只需执行JDOQL查询并按ID排序,然后选择第二项“位置2”是第二次添加的元素的索引(它是第二个元素,被添加到数据库中)。如java中的列表:myArrayList.add(新条目);myArrayList.add(新条目);myArrayList.add(新条目);。现在我cat get第二个元素:secondEntry=myArrayList.get(1)。我希望在数据存储中有相同的行为是的,您提到的查询可以返回所需的条目。但是,对于只获取一个元素来说,这不是太大的操作吗?查询将返回所有条目…好吧,如果主键作为索引的想法不好,我将不得不使用query:)查询返回您想要的范围。建议您仔细阅读jdoqlLooks,比如我的问题的更好解决方案是使用查询。。。谢谢