When the type of the results is known the preferred usage would be:
Query<Entity>query=Query.newGqlQueryBuilder(Query.ResultType.ENTITY,"select * from kind").build();QueryResults<Entity>results=datastore.run(query);while(results.hasNext()){Entityentity=results.next();...}
When the type of the results is unknown you can use this approach:
Queryquery=Query.newGqlQueryBuilder("select __key__ from kind").build();QueryResultsresults=datastore.run(query);if(Key.class.isAssignableFrom(results.getResultClass())){QueryResults<Key>keys=(QueryResults<Key>)results;while(keys.hasNext()){Keykey=keys.next();...}}
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[],[],null,["# Class GqlQuery<V> (2.31.2)\n\nVersion latestkeyboard_arrow_down\n\n- [2.31.2 (latest)](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.GqlQuery)\n- [2.31.1](/java/docs/reference/google-cloud-datastore/2.31.1/com.google.cloud.datastore.GqlQuery)\n- [2.30.0](/java/docs/reference/google-cloud-datastore/2.30.0/com.google.cloud.datastore.GqlQuery)\n- [2.29.1](/java/docs/reference/google-cloud-datastore/2.29.1/com.google.cloud.datastore.GqlQuery)\n- [2.28.2](/java/docs/reference/google-cloud-datastore/2.28.2/com.google.cloud.datastore.GqlQuery)\n- [2.27.1](/java/docs/reference/google-cloud-datastore/2.27.1/com.google.cloud.datastore.GqlQuery)\n- [2.26.4](/java/docs/reference/google-cloud-datastore/2.26.4/com.google.cloud.datastore.GqlQuery)\n- [2.25.2](/java/docs/reference/google-cloud-datastore/2.25.2/com.google.cloud.datastore.GqlQuery)\n- [2.24.3](/java/docs/reference/google-cloud-datastore/2.24.3/com.google.cloud.datastore.GqlQuery)\n- [2.23.0](/java/docs/reference/google-cloud-datastore/2.23.0/com.google.cloud.datastore.GqlQuery)\n- [2.22.0](/java/docs/reference/google-cloud-datastore/2.22.0/com.google.cloud.datastore.GqlQuery)\n- [2.21.3](/java/docs/reference/google-cloud-datastore/2.21.3/com.google.cloud.datastore.GqlQuery)\n- [2.20.2](/java/docs/reference/google-cloud-datastore/2.20.2/com.google.cloud.datastore.GqlQuery)\n- [2.19.2](/java/docs/reference/google-cloud-datastore/2.19.2/com.google.cloud.datastore.GqlQuery)\n- [2.18.5](/java/docs/reference/google-cloud-datastore/2.18.5/com.google.cloud.datastore.GqlQuery)\n- [2.17.6](/java/docs/reference/google-cloud-datastore/2.17.6/com.google.cloud.datastore.GqlQuery) \n\n public final class GqlQuery\u003cV\u003e extends Query\u003cV\u003e implements RecordQuery\u003cV\u003e\n\nA Google Cloud Datastore GQL query.\n\nA usage example:\n\nWhen the type of the results is known the preferred usage would be: \n\n\n Query\u003cEntity\u003e query =\n Query.newGqlQueryBuilder(Query.ResultType.ENTITY, \"select * from kind\").build();\n QueryResults\u003cEntity\u003e results = datastore.run(query);\n while (results.hasNext()) {\n Entity entity = results.next();\n ...\n }\n \nWhen the type of the results is unknown you can use this approach: \n\n\n Query query = Query.newGqlQueryBuilder(\"select __key__ from kind\").build();\n QueryResults results = datastore.run(query);\n if (Key.class.isAssignableFrom(results.getResultClass())) {\n QueryResults\u003cKey\u003e keys = (QueryResults\u003cKey\u003e) results;\n while (keys.hasNext()) {\n Key key = keys.next();\n ...\n }\n }\n \nSee Also: [GQL Reference](https://cloud.google.com/datastore/docs/apis/gql/gql_reference) \n\nInheritance\n-----------\n\n[Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e [Query](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query) \\\u003e GqlQuery\\\u003cV\\\u003e \n\nImplements\n----------\n\n[RecordQuery](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.RecordQuery)\\\u003cV\\\u003e \n\nInherited Members\n-----------------\n\n[Query.\\\u003cV\\\u003enewGqlQueryBuilder(Query.ResultType\\\u003cV\\\u003e,String)](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query#com_google_cloud_datastore_Query__V_newGqlQueryBuilder_com_google_cloud_datastore_Query_ResultType_V__java_lang_String_) \n[Query.getNamespace()](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query#com_google_cloud_datastore_Query_getNamespace__) \n[Query.newAggregationQueryBuilder()](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query#com_google_cloud_datastore_Query_newAggregationQueryBuilder__) \n[Query.newEntityQueryBuilder()](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query#com_google_cloud_datastore_Query_newEntityQueryBuilder__) \n[Query.newGqlQueryBuilder(String)](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query#com_google_cloud_datastore_Query_newGqlQueryBuilder_java_lang_String_) \n[Query.newKeyQueryBuilder()](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query#com_google_cloud_datastore_Query_newKeyQueryBuilder__) \n[Query.newProjectionEntityQueryBuilder()](/java/docs/reference/google-cloud-datastore/latest/com.google.cloud.datastore.Query#com_google_cloud_datastore_Query_newProjectionEntityQueryBuilder__) \n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nMethods\n-------\n\n### allowLiteral()\n\n public boolean allowLiteral()\n\nReturns whether the query string can contain literals. When `false`, the query string\nmust not contain any literals and instead must bind all values.\n\n### equals(Object obj)\n\n public boolean equals(Object obj)\n\n**Overrides** \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-)\n\n### getNamedBindings()\n\n public Map\u003cString,Object\u003e getNamedBindings()\n\nReturns an immutable map of named bindings.\n\n### getNamedBindingsMap()\n\n public Map\u003cString,GqlQuery.Binding\u003e getNamedBindingsMap()\n\n| **Internal Only**: This feature is not stable for application use.\n\n### getNumberArgs()\n\n public List\u003cObject\u003e getNumberArgs()\n\nReturns an immutable list of positional bindings (using original order).\n\n### getPositionalBindingsMap()\n\n public List\u003cGqlQuery.Binding\u003e getPositionalBindingsMap()\n\n| **Internal Only**: This feature is not stable for application use.\n\n### getQueryString()\n\n public String getQueryString()\n\nReturns the query string for this query.\n\n### getType()\n\n public Query.ResultType\u003cV\u003e getType()\n\n### hashCode()\n\n public int hashCode()\n\n**Overrides** \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--)\n\n### nextQuery(RunQueryResponse responsePb)\n\n public RecordQuery\u003cV\u003e nextQuery(RunQueryResponse responsePb)\n\n| **Internal Only**: This feature is not stable for application use.\n\n### populatePb(RunQueryRequest.Builder requestPb)\n\n public void populatePb(RunQueryRequest.Builder requestPb)\n\n| **Internal Only**: This feature is not stable for application use.\n\n### toString()\n\n public String toString()\n\n**Overrides** \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--)"]]