在我的数据库中有一个表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();
答案 0 :(得分:0)
首先,看起来您正在使用JPA。来自我们的文档:
警告:我们认为大多数开发人员都会有更好的使用体验 低级Datastore API,或开发的一个开源API 专门针对数据存储,例如Objectify。 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)