我有实体组
@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
}
答案 0 :(得分:1)
MongoDB中没有级联删除。
您需要从列表/集合中手动删除引用。使用list.remove(xxx)
和datastore.save(entity)
应该可以正常运作。您是否可以在IDE中调试代码并检查Java代码是否真的删除了学生参考?
一旦这样做,MongoDB中的保存也应该有效。
答案 1 :(得分:0)
这绝对应该有效(我经常使用它)。
我可以想到几个原因:
您的getStudentList()
方法正在返回该集合的副本,
而不是基础连接。
您没有为Student类定义准确的hashCode()
和equals()
,因此删除与您的Group对象不匹配。
你在内存的其他地方有一个预先加载的Group对象版本,你在deleteStudent
运行后保存,这会重写旧版本的studentList,而那个老学生仍在那里。< / p>