在這種情況下,(刪除與布拉德·皮特的所有電影中它作爲一個演員),你可以刪除這樣的實體:
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();
在一個循環中執行數據庫操作是壞的風格,如果可能的話,應避免。
一兩件事:
如果必須通過ID刪除實體線路是這樣的:
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再次感謝您的耐心和幫助。我會接受答案,抱歉沒有提前做。 –