spring-data-mongodb 대상 관련 @DBRef 학습 의문점

3307 단어
spring-data-mongodb에서 주석 @DBRef를 사용하여 대상의 연결을 설정할 수 있으며 @DBRef는 패키지 org에 있습니다.springframework.data.mongodb.core.mapping.DBRef;중간
예를 들어, 관계식 솔리드는 다음과 같습니다.
 
Student( )
@Document(collection="student")
public class Student {
	@Id
	private String studentId;
	@Indexed(unique=true)
	private String studentName;
	private int age;
	@DBRef
	private List courses;

//setter,getter 
}
Course 
@Document(collection="course")
public class Course {
	@Id
	private String courseId;
	@Indexed(unique=true)
	private String courseName;
//setter,getter
}

 
새 Student 대상을 만들고 두 과목을 Student 대상에게 값을 부여합니다. (주: 이 두 과목은 데이터베이스에 없습니다.) 그리고 데이터베이스에 저장합니다.
		List courses = new ArrayList();
		Course math = new Course();
		Course english = new Course();
	
		math.setCourseId("c01");
		math.setCourseName("math");
		
		english.setCourseId("c02");
		english.setCourseName("english");

		courses.add(english);
		courses.add(math);
		
		Student s = new Student();
		s.setAge(21);
		s.setCourses(courses);
		s.setStudentId("2009011");
		s.setStudentName("lklk");
		
		studentService.addStudent(s);

 
논리적으로 만약에 데이터베이스에 이 두 과정이 존재하지 않는다면 관련을 맺었기 때문에 Student 대상을 저장할 때 오류를 보고해야 하는데 왜 저장에 성공할 수 있는지.저장된 데이터는 다음과 같습니다.
{
    "_id" : "2009011",
    "_class" : "cn.com.coolcao.springmongo.entity.Student",
    "studentName" : "lklk",
    "age" : 21,
    "courses" : [ 
        {
            "$ref" : "course",
            "$id" : "c02"
        }, 
        {
            "$ref" : "course",
            "$id" : "c01"
        }
    ]
}

 
이렇게 하면 @DBRef가 성공적으로 연결되었음을 알 수 있습니다.그러나course라는 컬렉션에는 c02,c01이라는 두 과목이 없다. 이렇게 하는 의미는 무엇입니까?(course 집합은 아직 비어 있으며 데이터가 없습니다.)
 
관련 대상 간의 저장, 삭제 등 작업을 했고spring-data-mongodb는 검사를 하지 않고 바로 저장했습니다. 삭제한 부분은 의미가 무엇인지 잘 모르겠습니다.이렇게 삽입된 문서와 실질적인 차이는 어디에 있습니까?
 
질의 정보:
만약 연관이 있다면 조회할 때 어떤 모습일까요?
다음은 컬렉션에 세 가지 데이터를 삽입합니다.
/* 0 */
{
    "_id" : "c01",
    "_class" : "cn.com.coolcao.springmongo.entity.Course",
    "courseName" : "math"
}

/* 1 */
{
    "_id" : "c02",
    "_class" : "cn.com.coolcao.springmongo.entity.Course",
    "courseName" : "english"
}

/* 2 */
{
    "_id" : "c03",
    "_class" : "cn.com.coolcao.springmongo.entity.Course",
    "courseName" : "chinese"
}

 
그런 다음 Student 질의 작업을 수행합니다.
String id = "2009011";
Student s = studentService.queryById(id);

질의의 결과는 다음과 같습니다.
Student [studentId=2009011, studentName=lklk,age=21, courses=[ Course [courseId=c02, courseName=english], Course[courseId=c01, courseName=math]]]
 
즉, 이때 조회할 때spring-data-mongodb는 관련된Course 실체도 조회하는 것이 이상적인 결과라는 것이다.
 
내가 제시한 첫 번째 점에 대해 @DBRef 주석을 사용하여 대상 관련을 한 후에 삽입, 삭제 작업을 할 때 대상 간의 관련 관계를 검사하지 않고 바로 조작했다. 이 문제를 어떻게 해결해야 하는가.몬godb를 잘 아는 친구가 설명해 주세요. 동생이 몬godb를 처음 배우기 시작했으니 여러분의 아낌없는 가르침을 바랍니다.

좋은 웹페이지 즐겨찾기