Как удалить данные из движка приложения с помощью отфильтрованного запроса - PullRequest
1 голос
/ 23 июня 2010

Вот мой фрагмент кода.Этот код очень хорошо работает с локальным хранилищем данных разработки.Но не работает на реальном движке приложения.Используемый здесь фильтр запросов возвращает только 181 строку.

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.FetchOptions;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Query.FilterOperator;
Query query = new Query("Share");
query.addFilter("timeOfData", FilterOperator.GREATER_THAN, sdf.parse(date));
query.setKeysOnly();
ArrayList<Key> allKeys = new ArrayList<Key>();
if(numberOfRowsToBedeletedAtOnceString != null)
 numberOfRowsToBedeletedAtOnce = Integer.parseInt(numberOfRowsToBedeletedAtOnceString);
    for (final Entity e : dcc.prepare(query).asIterable(FetchOptions.Builder.withLimit(numberOfRowsToBedeletedAtOnce)))
    {
      allKeys.add(e.getKey());
    }

    allKeys.trimToSize();
    dcc.delete(allKeys);
    out.print("Deleted By Date count : " + allKeys.size());
    out.flush();
    out.close();

Ответы [ 2 ]

1 голос
/ 29 января 2011

что вы подразумеваете под "не работает", в частности? есть сообщение об ошибке? что это говорит? также, каково значение numberOfRowsToBedeletedAtOnce?

, если это ставит тупик, или вы получаете ошибку, которая говорит, что удаление слишком велико, попробуйте уменьшить numberOfRowsToBedeletedAtOnce.

1 голос
/ 23 июня 2010

Как показывают документы Google, вы можете использовать Удалить объекты по запросу

Query query = pm.newQuery(Person.class); 
query.setFilter("height > maxHeightParam"); 
query.declareParameters("int maxHeightParam"); 
query.deletePersistentAll(maxHeight);

Проверьте здесь

...