从文档中删除DBRef

时间:2013-04-26 15:24:12

标签: mongodb morphia nosql

我有实体组

@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
}

2 个答案:

答案 0 :(得分:1)

MongoDB中没有级联删除。

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

一旦这样做,MongoDB中的保存也应该有效。

答案 1 :(得分:0)

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

我可以想到几个原因:

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

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

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