Google app engine 无法从数据存储中检索所有数据
在我的数据存储中,有一个表EFlow,该表有7000个条目,但前1000个条目有以下文件: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
(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)