Closed
Description
The GqlQuery.Builder allows positional and named bindings for FullEntity values. However, when I try to use those methods, the query execution fails with the below exception. Is this supposed to work? Same error occurs when using StructuredQuery.PropertyFilter. Am I misunderstanding the purpose of these methods?
Exception in thread "main" com.google.cloud.datastore.DatastoreException: An entity value is not allowed
at com.google.cloud.datastore.spi.DefaultDatastoreRpc.translate(DefaultDatastoreRpc.java:110)
at com.google.cloud.datastore.spi.DefaultDatastoreRpc.translate(DefaultDatastoreRpc.java:96)
at com.google.cloud.datastore.spi.DefaultDatastoreRpc.runQuery(DefaultDatastoreRpc.java:164)
at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:93)
at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:89)
at com.google.cloud.RetryHelper.doRetry(RetryHelper.java:179)
at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:244)
at com.google.cloud.datastore.DatastoreImpl.runQuery(DatastoreImpl.java:88)
at com.google.cloud.datastore.QueryResultsImpl.sendRequest(QueryResultsImpl.java:73)
at com.google.cloud.datastore.QueryResultsImpl.<init>(QueryResultsImpl.java:57)
at com.google.cloud.datastore.DatastoreImpl.run(DatastoreImpl.java:82)
at com.google.cloud.datastore.DatastoreImpl.run(DatastoreImpl.java:73)
Caused by: com.google.datastore.v1.client.DatastoreException: An entity value is not allowed, code=INVALID_ARGUMENT
at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:126)
at com.google.datastore.v1.client.RemoteRpc.makeException(RemoteRpc.java:169)
at com.google.datastore.v1.client.RemoteRpc.call(RemoteRpc.java:89)
at com.google.datastore.v1.client.Datastore.runQuery(Datastore.java:108)
at com.google.cloud.datastore.spi.DefaultDatastoreRpc.runQuery(DefaultDatastoreRpc.java:162)
Sample Code
Datastore datastore = DatastoreOptions.getDefaultInstance().getService();
FullEntity<IncompleteKey> cellNumber = FullEntity.newBuilder().set("countryCode", "1").set("areaCode", "111").set("subscriberNumber", "2223333").build();
GqlQuery query = Query.newGqlQueryBuilder(Query.ResultType.ENTITY, "SELECT * FROM Contact WHERE cellNumber=@1").addBinding(cellNumber).build();
System.out.println(query);
QueryResults<Entity> results = datastore.run(query);
while (results.hasNext()) {
System.out.println(results.next());
}