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 –