Recupero dei risultati della query

Dopo aver creato una query, puoi specificare una serie di opzioni di recupero per controllare ulteriormente i risultati che restituisce. Consulta le query sul datastore per ulteriori informazioni sulla strutturazione delle query per la tua app.

Recupero di una singola entità

Per recuperare solo una singola entità che corrisponde alla query, utilizza il metodo PreparedQuery.asSingleEntity():

Query q =
    new Query("Person")
        .setFilter(new FilterPredicate("lastName", FilterOperator.EQUAL, targetLastName));

PreparedQuery pq = datastore.prepare(q);
Entity result = pq.asSingleEntity();

Questo restituisce il primo risultato trovato nell'indice che corrisponde alla query. Se è presente più di un risultato corrispondente, viene visualizzato un valore TooManyResultsException.

Ripetizione dei risultati delle query

Durante l'iterazione dei risultati di una query utilizzando i metodi PreparedQuery.asIterable() e PreparedQuery.asIterator(), Cloud Datastore recupera i risultati in batch. Per impostazione predefinita, ogni batch contiene 20 risultati, ma puoi modificare questo valore utilizzando FetchOptions.chunkSize(). Puoi continuare a eseguire l'iterazione dei risultati della query fino a quando non vengono restituiti tutti i risultati o fino al timeout della richiesta.

Recupero delle proprietà selezionate da un'entità

Per recuperare solo le proprietà selezionate di un'entità anziché l'intera entità, utilizza una query di proiezione. Questo tipo di query viene eseguito più velocemente e costa meno di una query che restituisce entità complete.

Analogamente, una query solo con chiavi consente di risparmiare tempo e risorse restituendo solo le chiavi alle entità corrispondenti, anziché alle entità complete. Per creare questo tipo di query, utilizza il metodo Query.setKeysOnly():

Query q = new Query("Person").setKeysOnly();

Impostazione di un limite per la query

Puoi specificare un limite per la query per controllare il numero massimo di risultati restituiti in un batch. L'esempio seguente recupera le cinque persone più alte da Cloud Datastore:

private List<Entity> getTallestPeople() {
  DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

  Query q = new Query("Person").addSort("height", SortDirection.DESCENDING);

  PreparedQuery pq = datastore.prepare(q);
  return pq.asList(FetchOptions.Builder.withLimit(5));
}

Che cosa succede dopo?