Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何按添加位置从数据存储中获取条目?(谷歌应用引擎和JDO)_Java_Google App Engine_Google Cloud Datastore_Jdo - Fatal编程技术网

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,比如我的问题的更好解决方案是使用查询。。。谢谢