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)andを使用するとdatastore.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 に答える