无法修改 Morphia 中的@Embedded 列表
Can't modify @Embedded List in Morphia
我有以下实体:
@Entity("users")
public class UserModel {
@Id
private ObjectId id;
private String userID;
private String prefix;
private List<TodoList> todoLists;
private List<Reminder> reminders;
TodoList 对象如下所示:
@Embedded
public class TodoList {
private String name;
private List<String> todos;
private List<String> completed;
我想做的是将一个字符串从 todos ArrayList 移动到 TodoList 内完成的 ArrayList,
这是我尝试这样做的方式:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) {
String todo = userData.getTodoLists().get(listIndex).getTodos().remove(todoIndex);
datastore.find(UserModel.class)
.filter(Filters.eq("userID", userData.getId()))
.update(UpdateOperators.set("todoLists." + listIndex + ".todos", userData.getTodoLists().get(listIndex).getTodos()), UpdateOperators.push("todoLists." + listIndex + ".completed", todo))
.execute();
}
这没有任何作用,我不知道哪里出了问题。另外,如果我简单地修改完整的 TodoList,将待办事项从 todos ArrayList 移动到完成的 ArrayList,然后像这样使用 set UpdateOperator:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) {
userData.getTodoLists().get(listIndex).completeTodo(todoIndex);
datastore.find(UserModel.class)
.filter(Filters.eq("userID", userData.getId()))
.update(UpdateOperators.set("todoLists." + listIndex, userData.getTodoLists().get(listIndex)))
.execute();
}
它仍然不起作用,即使我记录了 todo 变量和 userData 并且它看起来都是正确的,我只是无法将它保存到数据库中。
我也试过这个:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) {
String todo = userData.getTodoLists().get(listIndex).removeTodo(todoIndex);
System.out.println(todo); // This logs correctly, so at least the push operator should work
datastore.find(UserModel.class)
.filter(Filters.eq("userID", userData.getId()))
.update(UpdateOperators.set("todoLists." + listIndex + ".todos", userData.getTodoLists().get(listIndex).getTodos()), UpdateOperators.push("todoLists." + listIndex + ".completed", todo))
.execute();
}
removeTodo 所在的位置(在 TodoList Embedded class 内):
public String removeTodo(int todoIndex) {
return todos.remove(todoIndex);
}
好吧,我应该检查我的代码两次。 userData.getId() 似乎不是数据库中用户的正确 ID:/
我有以下实体:
@Entity("users")
public class UserModel {
@Id
private ObjectId id;
private String userID;
private String prefix;
private List<TodoList> todoLists;
private List<Reminder> reminders;
TodoList 对象如下所示:
@Embedded
public class TodoList {
private String name;
private List<String> todos;
private List<String> completed;
我想做的是将一个字符串从 todos ArrayList 移动到 TodoList 内完成的 ArrayList, 这是我尝试这样做的方式:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) {
String todo = userData.getTodoLists().get(listIndex).getTodos().remove(todoIndex);
datastore.find(UserModel.class)
.filter(Filters.eq("userID", userData.getId()))
.update(UpdateOperators.set("todoLists." + listIndex + ".todos", userData.getTodoLists().get(listIndex).getTodos()), UpdateOperators.push("todoLists." + listIndex + ".completed", todo))
.execute();
}
这没有任何作用,我不知道哪里出了问题。另外,如果我简单地修改完整的 TodoList,将待办事项从 todos ArrayList 移动到完成的 ArrayList,然后像这样使用 set UpdateOperator:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) {
userData.getTodoLists().get(listIndex).completeTodo(todoIndex);
datastore.find(UserModel.class)
.filter(Filters.eq("userID", userData.getId()))
.update(UpdateOperators.set("todoLists." + listIndex, userData.getTodoLists().get(listIndex)))
.execute();
}
它仍然不起作用,即使我记录了 todo 变量和 userData 并且它看起来都是正确的,我只是无法将它保存到数据库中。
我也试过这个:
public void completeTodo(int listIndex, int todoIndex, UserModel userData) {
String todo = userData.getTodoLists().get(listIndex).removeTodo(todoIndex);
System.out.println(todo); // This logs correctly, so at least the push operator should work
datastore.find(UserModel.class)
.filter(Filters.eq("userID", userData.getId()))
.update(UpdateOperators.set("todoLists." + listIndex + ".todos", userData.getTodoLists().get(listIndex).getTodos()), UpdateOperators.push("todoLists." + listIndex + ".completed", todo))
.execute();
}
removeTodo 所在的位置(在 TodoList Embedded class 内):
public String removeTodo(int todoIndex) {
return todos.remove(todoIndex);
}
好吧,我应该检查我的代码两次。 userData.getId() 似乎不是数据库中用户的正确 ID:/