1 万を超えるエンティティのデータストア内の各エンティティからいくつかのプロパティを取得するために、射影クエリを実行しようとしています。ドキュメントを読んで従いましたが、クエリで結果が返されません。単一のプロパティであるエンティティの ID フィールドのみを投影するように投影を単純化しましたが、それでも 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 に等しくなります。2 行目を単純に削除して、クエリにプロジェクションが含まれないようにすると、count
1000 に等しくなります。
アプリでObjectifyを使用していますが、射影クエリをサポートしていない Objectify v3 を使用しているため、射影クエリに GAE 低レベル API を使用しています。Objectify v4 をサポートするようにコードを変更するのは大変な作業です。
私が投影しているフィールドは、私のentityId
Objectify エンティティ オブジェクトでは次のようになります。
@Id Long entityId;