问题描述
我使用 Spring Boot 和 spring-data-mongodb (2.2.3) 来存储有兴趣的学生的集合。
我尝试将爱好添加到学生实体的爱好集并保存学生(学生可能有 10 万个爱好,而且添加率很高。
@Data
@Document(collection = "students")
public class Student {
@Id
String id;
@DBRef
Set<Hobby> hobbies;
}
@Data
@Document(collection = "hobbies")
public class Hobby {
@Id
String id;
String hobby;
public Hobby(String hobby) {
this.id = UUID.randomUUID().toString();
this.hobby = hobby;
}
}
我尝试将爱好添加到学生并以下一种方式保存学生:
Student student = studentRepo.findById(studentId);
Hobby hobby = new Hobby(hobbyString);
student.hobbies.add(hobby);
studentRepo.save(student);
但是在下一个请求中,我没有得到所有添加的爱好(我看到并非所有的爱好都出现在 mongo 的学生文档中)。我猜这是因为不同的 Spring Boot 线程访问此代码。我如何确保 Set 会被正确保存? 我目前可以在函数上添加同步,但从性能的角度来看,这不是一个好的解决方案。 我尝试将爱好存储为 Strings set、ElementCollection 和 DbRef,但得到了相同的结果。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)