В этом случае (удалить все фильмы с Брэдом Питтом в нем, как актер), вы можете удалить объект так:
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));
Когда вы говорите, что не работает .... вы получаете сообщение об ошибке? вам нужно явно объяснить, что вы подразумеваете под «не работает». – Patrice
Просто посмотрел ваш профиль. У вас есть 7 вопросов, для которых вы не приняли ответ. Если вы цените помощь других, вы должны продвигать полезные ответы и принимать решения. В противном случае люди могут быть менее готовы помочь вам в будущем. – konqi
@konqi еще раз спасибо за ваше терпение и помощь. Я буду принимать ответы, извините за то, что не делал этого раньше. –