微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何更新 MongoDB @DbRef 嵌入式集合?

如何解决如何更新 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?