4

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.");

このコードを実行すると、count0 に等しくなります。2 行目を単純に削除して、クエリにプロジェクションが含まれないようにすると、count1000 に等しくなります。

アプリでObjectifyを使用していますが、射影クエリをサポートしていない Objectify v3 を使用しているため、射影クエリに GAE 低レベル API を使用しています。Objectify v4 をサポートするようにコードを変更するのは大変な作業です。

私が投影しているフィールドは、私のentityIdObjectify エンティティ オブジェクトでは次のようになります。

@Id Long entityId;
4

1 に答える 1

3

したがって、ID プロパティのみを射影する単純化したケースが問題であることがわかりました。他のプロパティ フィールドで同じコードをテストしたところ、射影クエリが機能しました。

射影クエリを作成するときは、ID プロパティを射影しないでください。結果のエンティティには引き続き含まれますが、プロジェクションに含めると、クエリで結果が表示されなくなります。ID プロパティは、エンティティの他のプロパティ フィールドと同じ方法で保存されません。

于 2013-04-02T19:12:52.177 に答える