1

所有数据都在我的datasore有一个表的eFlow和该表有7000项,但第一个1000个条目有这些的Fileds:不能以检索从数据存储

(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(); 
+1

单个结果集中至少有1000个项目的服务限制,至少在早期,不知道是否是这种情况 - 无法找到任何指出任何方式..您是否尝试过使用游标。还有,您是否确认余额(6000条记录)实际上符合查询条件。 –

+0

确保查询中使用的属性为所有实体编制索引。 –

回答

0

首先,它看起来像你正在使用JPA。从我们的文档:

警告:我们认为大多数开发商将不得不使用 低级别的数据存储API,或者用于数据存储开发 特别是开源的API,如客体的一个更好的体验。 JPA被设计为 与传统关系数据库一起使用,因此无法明确表示数据存储的某些方面,这使得 与关系数据库(例如实体组和祖先查询)有所不同。这可能会导致难以理解和修复的微妙问题。

但是,如果你需要使用JPA保留:

作为结果的数量可能很大,需要处理分页与查询。

达到此目的的最佳方法是使用cursors

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) 
+0

感谢Dan McGrath –