使用 Spring boot 和 Mongodb 创建的空引用对象

问题描述 投票:0回答:1

我是使用 mongodb 和 springboot 的新手,试图创建一个带有引用对象的简单集合。下面是 JSON 请求和响应(带有空引用对象)。请让我知道创建 StudentClass 时如何将 Student 对象保存在数据库中。还有Student中的StudentAddress对象如何保存在数据库中。

Json请求:

{
    "classNo": "1",
    "className": "First",
    "student": [
        {
            "studentId": "1",
            "studentName": "Tom",
            "age": "20",
            "rollno": "12345",
            "address": {
                "hno": "A494",
                "town": "DTown",
                "pinCode": "123456",
                "city": "New york"
            }
        }
    ]
} 

回复:

{
    "id": {
        "timestamp": 1716307508,
        "date": "2024-05-21T16:05:08.000+00:00"
    },
    "classNo": 1,
    "className": "First",
    "student": [
        {
            "id": null,
            "studentId": 1,
            "studentName": "Tom",
            "age": 20,
            "rollno": 12345,
            "studentAddress": null
        }
    ]
}

在 Mongodb 中创建的集合如下图所示

我有三个实体StudentClass、Student 和StudentAddress。

StudentClass.java:

@Data
@AllArgsConstructor
@Document
public class StudentClass {

       @Id
       private ObjectId id;
        private Long classNo;

        private String className;

       @DocumentReference
       private List<Student> student;
    }

学生.java:

@Data
@AllArgsConstructor
@Document
public class Student {

       @Id
       private ObjectId id;
       
       @Indexed(unique = true)
       private Long studentId;
       
       private String studentName;
       private int age;
       private int rollno;

       @DocumentReference
       private StudentAddress studentAddress;
       
    }

StudentAddress.java:

@Data
@AllArgsConstructor
@Document
public class StudentAddress {
    @Id
    private ObjectId id;
    private String hno;
    private String town;
    private Long pinCode;
    private String city;
    
}

存储库: StudentClassRepository.java:

public interface StudentClassRepository extends MongoRepository<StudentClass, ObjectId> {
       
    Optional<StudentClass> findById(ObjectId id);   
}

StudentRepository.java:

public interface StudentRepository extends MongoRepository<Student, ObjectId> {
    
    Optional<Student> findById(ObjectId id);
}

StudentAddressRepository.java:

public interface StudentAddressRepository extends MongoRepository<StudentAddress,ObjectId>{

    Optional<StudentAddress> findById(ObjectId id);
}

控制器: StudentClassController.java:


@RestController
@RequiredArgsConstructor
@RequestMapping("/studentclass")
public class StudentClassController {

       @Autowired
       private final StudentClassService studentClassService;
       
       
       @PostMapping("/create-student-and-class-in-db")
       private ResponseEntity<StudentClass> saveClassWithStudent(@RequestBody StudentClass studentClass){
           StudentClass stdClass = null;
            HttpHeaders headers = new HttpHeaders();

            stdClass = studentClassService.saveClassWithStudent(studentClass);
           return new ResponseEntity<StudentClass>(stdClass, headers, HttpStatus.CREATED);
       }



       @GetMapping("/get-all-classes")
       private ResponseEntity<List<StudentClass>> getAllClasses(){
          List<StudentClass> list = studentClassService.getAllClasses();
          return ResponseEntity.ok(list);
       }

尝试使用上面的代码但得到空引用。我应该得到与请求类似的响应。

json mongodb spring-boot reference null
1个回答
0
投票

单独保存所有引用的对象,从而解决了问题。现在所有引用的对象都是使用 Id 创建的。

© www.soinside.com 2019 - 2024. All rights reserved.