0

我有实体组

@Entity("Group")
public class Group implements Serializable{
@Id
public ObjectId id;
public String name;
public List<Students> studentsList;
}

和实体学生

@Entity("Student")
public class Studentimplements Serializable{
@Id
public ObjectId id;
public String name;
public String surname;
}

如何更正从组中删除学生?我尝试过这样的事情:

public void deleteStudent(String groupId, Student student) {
Group group = dataStore().find(Group.class,"_id",new ObjectId(groupId)).get();
List<Students> studentList = group.getStudentList();
studentList.remove(student);
dataStore().save(group); //doesn't work
dataStore().merge(group); //doesn't work
dataStore().delete(student); //works but causes issue cause DBref in Group still exists
}
4

2 回答 2

1

MongoDB 中没有级联删除。

您需要手动从列表/集合中删除引用。使用list.remove(xxx)anddatastore.save(entity)应该可以正常工作。您能否在 IDE 中调试代码并检查 Java 代码是否真的删除了学生参考?

一旦这工作,MongoDB 中的保存也应该工作。

于 2013-04-29T15:10:23.737 回答
0

这绝对应该有效(我经常使用它)。

我能想到几个原因:

  1. 您的getStudentList()方法正在返回集合的副本,而不是底层连接。

  2. 您没有为 Student 类准确hashCode()定义equals(),因此删除与您的 Group 对象不匹配。

  3. 您在内存中的其他地方有一个 Group 对象的预加载版本,您在deleteStudent运行后保存它,这会重写一个旧版本的 studentList,而那个老学生仍然在那里。

于 2013-04-29T17:20:52.857 回答