Google app engine 无法从数据存储中检索所有数据

Google app engine 无法从数据存储中检索所有数据,google-app-engine,jpa,google-cloud-datastore,google-cloud-platform,nhibernate-hql,Google App Engine,Jpa,Google Cloud Datastore,Google Cloud Platform,Nhibernate Hql,在我的数据存储中,有一个表EFlow,该表有7000个条目,但前1000个条目有以下文件: (ID/Name, appliedBy, approved, childEflowName, completed, completedApprovers, created_on, dueDate, eflowDispName, eflowName, isResubmitted, modified_on, nextApprover, parentEflowName, rule

在我的数据存储中,有一个表EFlow,该表有7000个条目,但前1000个条目有以下文件:

(ID/Name, appliedBy, approved,  childEflowName, completed,  completedApprovers, created_on, dueDate,    eflowDispName,  eflowName,  isResubmitted,  modified_on,    nextApprover,   parentEflowName,    ruleEmailReceivers, ruleNames,  upComingApprovers,  workFlowName,   workFlowVersion,    approvalStateValues)
剩下的6000个条目有以下特征:

(ID/Name,   appliedBy,  approvalStateValues,    approved,   childEflowName, completed,  completedApprovers, created_on, draft,  dueDate,    dynamicApprovalStates,  eflowApprovers, eflowDispName,  eflowName,  fieldValues,    isResubmitted,  modified_on,    nextApprover,   parentEflowName,    ruleEmailReceivers, ruleNames,  upComingApprovers,  workFlowName,   workFlowVersion) 
我在这个新字段中添加了draft、dynamicApprovalStates、eflowApprovers和fieldValues

我的问题是,当我从数据存储中检索数据时,我只得到了前1000条记录

如何检索所有记录

我的问题是:

List<EFlow> lst =  this.entityManager.createQuery("select  from " + this.clazz.getName() + " i where  i.completed = false and i.approved = false").getResultList();
List lst=this.entityManager.createQuery(“从“+this.clazz.getName()+”i中选择,其中i.completed=false,i.approved=false”).getResultList();

首先,看起来您正在使用。从我们的文档中:

警告:我们认为大多数开发人员使用 低级数据存储API,或开发的开源API之一 专门用于数据存储,例如Objectify。JPA的设计宗旨是 与传统关系数据库一起使用,因此无法 显式表示数据存储的某些方面 不同于关系数据库,如实体组和 祖先查询。这可能导致难以解决的微妙问题 理解并修复

但是,如果您需要继续使用JPA:

由于结果的数量可能很大,因此需要使用查询处理分页

实现这一目标的最佳方法是使用

import com.google.appengine.api.datastore.Cursor;
导入com.google.appengine.datanucleus.query.JPACursorHelper;
...
Query Query=this.entityManager.createQuery(“从“+this.clazz.getName()+”i中选择,其中i.completed=false和i.approved=false”)
Cursor Cursor=Cursor.newBuilder().build();
做{
setHint(JPACursorHelper.CURSOR\u HINT,CURSOR);
List lst=query.getResultList();
//…在这里做一些关于lst的事情//
//获取光标,以便查看是否有更多结果
cursor=JPACursorHelper.getCursor(lst);
}while(光标!=null)

首先,看起来您正在使用。从我们的文档中:

警告:我们认为大多数开发人员使用 低级数据存储API,或开发的开源API之一 专门用于数据存储,例如Objectify。JPA的设计宗旨是 与传统关系数据库一起使用,因此无法 显式表示数据存储的某些方面 不同于关系数据库,如实体组和 祖先查询。这可能导致难以解决的微妙问题 理解并修复

但是,如果您需要继续使用JPA:

由于结果的数量可能很大,因此需要使用查询处理分页

实现这一目标的最佳方法是使用

import com.google.appengine.api.datastore.Cursor;
导入com.google.appengine.datanucleus.query.JPACursorHelper;
...
Query Query=this.entityManager.createQuery(“从“+this.clazz.getName()+”i中选择,其中i.completed=false和i.approved=false”)
Cursor Cursor=Cursor.newBuilder().build();
做{
setHint(JPACursorHelper.CURSOR\u HINT,CURSOR);
List lst=query.getResultList();
//…在这里做一些关于lst的事情//
//获取光标,以便查看是否有更多结果
cursor=JPACursorHelper.getCursor(lst);
}while(光标!=null)

至少在早期,单个结果集中有1000个项目的服务限制,不确定是否存在这种情况-找不到任何指向这两种方式的东西。。你试过使用光标吗。您还确认余额(6000条记录)实际上符合查询条件。请确保查询中使用的属性为所有实体编制了索引。至少在早期,单个结果集中的服务限制为1000项,不确定是否还有这种情况-无论哪种情况都找不到任何指向。。你试过使用光标吗。您还确认余额(6000条记录)实际上符合查询条件。请确保查询中使用的属性为所有实体编制了索引。
import com.google.appengine.api.datastore.Cursor;
import com.google.appengine.datanucleus.query.JPACursorHelper;

...

Query query = this.entityManager.createQuery("select  from " + this.clazz.getName() + " i where  i.completed = false and i.approved = false")

Cursor cursor = Cursor.newBuilder().build();
do {
   query.setHint(JPACursorHelper.CURSOR_HINT, cursor);

   List<EFlow> lst = query.getResultList();

   // ... Do stuff on lst here .. //

   // Get the cursor so you can see if there are more results
   cursor = JPACursorHelper.getCursor(lst);
} while (cursor != null)