如何解决如何更新 MongoDB @DbRef 嵌入式集合?
所以,我正在尝试使用 spring-data-mongodb 进行 MongoDB CRUD 操作。下面是我的模型类,
@Document(collection = "alumni_students")
public class AlumniStudent {
@Id
private String id;
private String firstName;
private String lastName;
private String email;
@DBRef
private AlumniDepartment alumniDepartment;
@DBRef
private List<AlumniSubject> alumniSubjects;
... getters/setters
@Document(collection = "alumni_department")
public class AlumniDepartment {
@Id
private String id;
private String departmentName;
private String location;
... getters/setters
@Document(collection = "alumni_subjects")
public class AlumniSubject {
@Id
private String id;
private String subjectName;
private int marks;
... getters/setters
我将 MongoRepository 用于单个集合的操作,如下所示,
@Repository
public interface AlumniStudentRepository extends MongoRepository<AlumniStudent,String> { }
@Repository
public interface AlumniDepartmentRepository extends MongoRepository<AlumniDepartment,String> {}
@Repository
public interface AlumniSubjectRepository extends MongoRepository<AlumniSubject,String> {}
到目前为止,我在创作和获取学生详细信息方面做得很好。我面临的问题是更新学生数据时。尤其是在更新数据时,我很困惑。
下面是我在服务层的更新代码,
@Autowired
AlumniStudentRepository alumniStudentRepo;
@Autowired
AlumniDepartmentRepository alumniDeptRepo;
@Autowired
AlumniSubjectRepository alumniSubjRepo;
public AlumniStudent updateStudent(AlumniStudent student,String id) {
Optional<AlumniStudent> fetchedStudent = alumniStudentRepo.findById(id);
**// UPDATE STUDENT DATA,WORKS FINE**
if (fetchedStudent.isPresent()) {
AlumniStudent studentFromDB = fetchedStudent.get();
studentFromDB.setFirstName(student.getFirstName());
studentFromDB.setLastName(student.getLastName());
studentFromDB.setEmail(student.getEmail());
**// UPDATE DEPARTMENT DATA,WORKS FINE**
if (student.getAlumniDepartment() != null) {
Optional<AlumniDepartment> deptData = alumniDeptRepo.findById(studentFromDB.getAlumniDepartment().getId());
if (deptData.isPresent()) {
AlumniDepartment alumniDepartment = deptData.get();
alumniDepartment.setDepartmentName(student.getAlumniDepartment().getDepartmentName());
alumniDepartment.setLocation(student.getAlumniDepartment().getLocation());
alumniDeptRepo.save(alumniDepartment);
studentFromDB.setAlumniDepartment(alumniDepartment);
}
}
**// UPDATE SUBJECTS ARRAY DATA.... HOW TO DO THIS?**
if (student.getAlumniSubjects() != null && !student.getAlumniSubjects().isEmpty()) {
// Problematic area. How to perform update of arraylist here?
}
return alumniStudentRepo.save(studentFromDB);
}
}
这是邮递员点击的网址:
本地主机:8080/校友/60aa384ffbf1851f56c71bef
这是请求正文:
{
"firstName": "Babita","lastName": "Raman","email": "babita@gmail.com","alumniDepartment": {
"departmentName": "Android Developer","location": "dubai"
},"alumniSubjects": [
{
"subjectName": "Java","marks": 80
},{
"subjectName": "Unit testing","marks": 60
},{
"subjectName": "Docker","marks": 80
}
]
}
无法创建对 ID 为 NULL 的对象的引用。
这里有人可以帮助更新被引用为 @DbRef 的数组数据吗?
先谢谢大家。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。