-1

Мне нужно проверить, содержит ли поле String, а если это так - удалить всю строку по id. Этот код не работает:Задайте цель: удалите всю строку по id

Query<Bet> query = ofy().load().type(Movie.class); 

     for (Movie m : query) { 
      List<String> list = m.getActors(); 
      String search = "Brad Pitt"; 
      for (String str : list) { 
       if (str.trim().contains(search)) { 
        ofy().delete().type(Movie.class).id(m.getId()).now(); 

       } 
      } 
     } 
+1

Когда вы говорите, что не работает .... вы получаете сообщение об ошибке? вам нужно явно объяснить, что вы подразумеваете под «не работает». – Patrice

+0

Просто посмотрел ваш профиль. У вас есть 7 вопросов, для которых вы не приняли ответ. Если вы цените помощь других, вы должны продвигать полезные ответы и принимать решения. В противном случае люди могут быть менее готовы помочь вам в будущем. – konqi

+0

@konqi еще раз спасибо за ваше терпение и помощь. Я буду принимать ответы, извините за то, что не делал этого раньше. –

ответ

0

В этом случае (удалить все фильмы с Брэдом Питтом в нем, как актер), вы можете удалить объект так:

Query<Movie> query = ofy().load().type(User.class); 

for (Movie m : query) { 
    List<String> list = m.getActors(); 
    String search = "Brad Pitt"; 
    for (String str : list) { 
     if (str.trim().contains(search)) { 
      ofy().delete().entity(m).now(); 
     } 
    } 
} 

Не то, чтобы я удалить с delete().entity(...). Другим вариантом будет удаление по ключу, например delete().key(Key.create(Movie.class, idToRemove). Первое делает что-то очень похожее, но поскольку у вас есть вся сущность, вам не нужно усложнять вещи. Также, если вы удаляете с entity(...), он будет работать, если у объекта есть @Parent, тогда как если вы удалите ключ, вам придется дополнительно указать своего предка в Key.create(ancestorKey, Movie.class, idToRemove).

Я обычно делаю несколько удалений, как это:

Query<Movie> query = ofy().load().type(User.class); 
List<Movie> toDelete = new ArrayList<>(); 

for (Movie m : query) { 
    List<String> list = m.getActors(); 
    String search = "Brad Pitt"; 
    for (String str : list) { 
     if (str.trim().contains(search)) { 
      toDelete.add(m); 
     } 
    } 
} 

ofy().delete().entities(toDelete).now(); 

Выполнение операций с базами данных в цикле плохой стиль и его следует избегать, если это возможно.

еще одно:

Если необходимо удалить объект по идентификатору строка будет выглядеть следующим образом:

ofy().delete().type(Movie.class).id(idToDelete); 

Однако, как я намекнул на перед, если ваш Movie класс имеет родительский, это не сработает, потому что вы всегда должны указывать весь ключ, таким образом, с предком строка будет выглядеть так:

Key<MyParentClass> parent = Key.create(MyParentClass.class, myParentId); 
ofy().delete().type(Movie.class).parent(parent).id(idToDelete); 

, что эквивалентно

ofy().delete().key(Key.create(Key.create(MyParentClass.class, myParentId), Movie.class, idToDelete)); 
+0

Thnx снова! К сожалению, это не сработало, у меня ошибка: '99% Конфигурация конечных точек не обновлена. Приложение вернуло ошибку, когда сервер Google Cloud Endpoints попытался связаться с ней. com.google.appengine.tools.admin.AppVersionUpload checkEndpointsServingStatusResult 99% Дополнительную информацию см. В документации по устранению неполадок развертывания: https: // developers. 99% Игнорирование ошибки конечных точек и продолжение обновления. SEVERE: Конфигурация конечных точек не обновлена. Приложение вернуло ошибку, когда сервер Google Cloud Endpoints попытался связаться с ней. –

+0

@GidiSprintzin Это похоже на другую проблему. Пожалуйста, откройте новый вопрос с примером MCV (http://stackoverflow.com/help/mcve), чтобы мы могли его проанализировать. В качестве отправной точки я бы очистил проект и выполнил полную перестройку. – konqi

+0

Я думаю, что проблема с моим кодом заключается в том, что в поле есть массив, который выглядит так: '[{" stringValue ":" yyy "," indexed ": false}, {" stringValue ":" Brad Pitt " , "indexed": false}, {"stringValue": "jhon13", "indexed": false}] ', и я не знаю, как вытащить имя. –

 Смежные вопросы

  • Нет связанных вопросов^_^