A less trivial example of a projection query that returns the first 10 results of "age" and
"name" properties (sorted and grouped by "age") with an age greater than 18
[[["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 StructuredQuery<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.StructuredQuery)\n- [2.31.1](/java/docs/reference/google-cloud-datastore/2.31.1/com.google.cloud.datastore.StructuredQuery)\n- [2.30.0](/java/docs/reference/google-cloud-datastore/2.30.0/com.google.cloud.datastore.StructuredQuery)\n- [2.29.1](/java/docs/reference/google-cloud-datastore/2.29.1/com.google.cloud.datastore.StructuredQuery)\n- [2.28.2](/java/docs/reference/google-cloud-datastore/2.28.2/com.google.cloud.datastore.StructuredQuery)\n- [2.27.1](/java/docs/reference/google-cloud-datastore/2.27.1/com.google.cloud.datastore.StructuredQuery)\n- [2.26.4](/java/docs/reference/google-cloud-datastore/2.26.4/com.google.cloud.datastore.StructuredQuery)\n- [2.25.2](/java/docs/reference/google-cloud-datastore/2.25.2/com.google.cloud.datastore.StructuredQuery)\n- [2.24.3](/java/docs/reference/google-cloud-datastore/2.24.3/com.google.cloud.datastore.StructuredQuery)\n- [2.23.0](/java/docs/reference/google-cloud-datastore/2.23.0/com.google.cloud.datastore.StructuredQuery)\n- [2.22.0](/java/docs/reference/google-cloud-datastore/2.22.0/com.google.cloud.datastore.StructuredQuery)\n- [2.21.3](/java/docs/reference/google-cloud-datastore/2.21.3/com.google.cloud.datastore.StructuredQuery)\n- [2.20.2](/java/docs/reference/google-cloud-datastore/2.20.2/com.google.cloud.datastore.StructuredQuery)\n- [2.19.2](/java/docs/reference/google-cloud-datastore/2.19.2/com.google.cloud.datastore.StructuredQuery)\n- [2.18.5](/java/docs/reference/google-cloud-datastore/2.18.5/com.google.cloud.datastore.StructuredQuery)\n- [2.17.6](/java/docs/reference/google-cloud-datastore/2.17.6/com.google.cloud.datastore.StructuredQuery) \n\n public abstract class StructuredQuery\u003cV\u003e extends Query\u003cV\u003e implements RecordQuery\u003cV\u003e\n\nAn implementation of a Google Cloud Datastore Query that can be constructed by providing all the\nspecific query elements.\n\nA usage example:\n\nA simple query that returns all entities for a specific kind \n\n\n Query\u003cEntity\u003e query = Query.newEntityQueryBuilder().setKind(kind).build();\n QueryResults\u003cEntity\u003e results = datastore.run(query);\n while (results.hasNext()) {\n Entity entity = results.next();\n ...\n }\n \nA simple key-only query of all entities for a specific kind \n\n\n Query\u003cKey\u003e keyOnlyQuery = Query.newKeyQueryBuilder().setKind(KIND1).build();\n QueryResults\u003cKey\u003e results = datastore.run(keyOnlyQuery);\n ...\n \nA less trivial example of a projection query that returns the first 10 results of \"age\" and\n\"name\" properties (sorted and grouped by \"age\") with an age greater than 18 \n\n\n Query\u003cProjectionEntity\u003e query = Query.newProjectionEntityQueryBuilder()\n .setKind(kind)\n .setProjection(Projection.property(\"age\"), Projection.first(\"name\"))\n .setFilter(PropertyFilter.gt(\"age\", 18))\n .setGroupBy(\"age\")\n .setOrderBy(OrderBy.asc(\"age\"))\n .setLimit(10)\n .build();\n QueryResults\u003cProjectionEntity\u003e results = datastore.run(query);\n ...\n \nSee Also: [Datastore queries](https://cloud.google.com/appengine/docs/java/datastore/queries) \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 StructuredQuery\\\u003cV\\\u003e \n\nImplements\n----------\n\ncom.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### 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### getDistinctOn()\n\n public List\u003cString\u003e getDistinctOn()\n\nReturns the distinct on clause for this query.\n\n### getEndCursor()\n\n public Cursor getEndCursor()\n\nReturns the end cursor for this query.\n\n### getFilter()\n\n public StructuredQuery.Filter getFilter()\n\nReturns the filter for this query.\n\n### getKind()\n\n public String getKind()\n\nReturns the kind for this query.\n\n### getLimit()\n\n public Integer getLimit()\n\nReturns the limit for this query.\n\n### getOffset()\n\n public int getOffset()\n\nReturns the offset for this query.\n\n### getOrderBy()\n\n public List\u003cStructuredQuery.OrderBy\u003e getOrderBy()\n\nReturns the order by clause for this query.\n\n### getProjection()\n\n public List\u003cString\u003e getProjection()\n\nReturns the projection for this query.\n\n### getStartCursor()\n\n public Cursor getStartCursor()\n\nReturns the start cursor for this query.\n\n### getType()\n\n public Query.ResultType\u003cV\u003e getType()\n\n| **Internal Only**: This feature is not stable for application use.\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 StructuredQuery\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### toBuilder()\n\n public abstract StructuredQuery.Builder\u003cV\u003e toBuilder()\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--)"]]