SpringBoot Mongorepository 未正确保存实体属性集

问题描述

我使用 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...