#mongodb #spring-boot #hibernate #jpa #mongorepository
Вопрос:
Я использую Spring Boot и spring-data-mongodb (2.2.3) для хранения коллекции студентов, у которых есть хобби.
Я пытаюсь добавить хобби в набор увлечений студенческой организации и сохранить студента( у студента может быть 100 тыс. увлечений, которые добавляются довольно быстро.
@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);
Но в следующем запросе я не получаю все добавленные хобби (я вижу, что не все хобби присутствуют в студенческом документе в монго). Я предполагаю, что это происходит из-за того, что разные потоки загрузки Spring получают доступ к этому коду. Как я могу гарантировать, что набор будет правильно сохранен?
В настоящее время я могу добавить синхронизированную функцию, но это не очень хорошее решение с точки зрения производительности.
Я попытался сохранить хобби в виде набора строк, коллекции элементов и DBRef, но получил тот же результат.