2013-04-02 65 views
2

我正在嘗試執行投影查詢以從我的數據存儲中的每個實體中獲取多個屬性,其中包含一萬多個實體。我已閱讀並遵循documentation,但我的查詢沒有返回任何結果。我甚至簡化了我的投影,只投射一個屬性,實體的ID字段,但仍然得到0結果。這裏是我的簡化代碼:Google App Engine投影查詢返回0結果

Query q = new Query("MyEntity"); 
q.addProjection(new PropertyProjection("entityId", Long.class)); 
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
PreparedQuery pq = datastore.prepare(q); 
int count = pq.countEntities(FetchOptions.Builder.withLimit(1000)); 
log.info("query contains " + count + " items."); 

當我運行這段代碼,count等於0。如果我只是刪除第二行,以便查詢有沒有預測,count等於1000

我使用Objectify在我的應用程序中,但我使用GAE低級API進行投影查詢,因爲我使用的Objectify v3不支持投影查詢。改變我的代碼來支持Objectify v4會有很多工作要做。

entityId場我伸出看起來像這樣在我的物化實體對象:

@Id Long entityId; 

回答

2

因此,原來我的簡化,只突出ID屬性的情況下,原來是這個問題。當我在任何其他屬性字段上測試相同的代碼時,投影查詢就可以工作。

創建投影查詢時,不應投影ID屬性。它仍然包含在生成的實體中,但將它包括在投影中會導致查詢無法找到結果。 ID屬性的存儲方式與實體中其他屬性字段的存儲方式不同。

+1

正確 - ids不是屬性。 Ids是實體關鍵的一部分。 – stickfigure

相關問題