저는 스프링 데이터를 사용하여 pojos를 mongo json 문서에 매핑하고 있습니다.스프링 - 데이터 및 mongodb, 자연 대 인공 id 사용?
mongo 오브젝트 ID reference은 "문서에 자연스러운 기본 키가 있으면 변경할 수 없으므로 자동으로 생성 된 ID 대신 _id에 사용하는 것이 좋습니다."라고 말합니다. 내 질문은, 내 문서가 자연의 기본 키를 가지고 있지만 그것이 개체의 속성의 조합 인 경우 자연적인 기본 키를 만들기 위해 결합해야합니까?
값을 변경할 수 없다고 가정하고 함께 연결하면 결과가 고유 한 것으로 보장됩니다. id에 대해 선언 한 타입에 상관없이, Spring은 그것을 ObjectId로 변환한다. (그런 타입을위한 변환기를 가지고 있지 않다면 String으로 변환한다.) 하루에 학생 당 더 이상 하나의 숙제는 없어 보장
@Document
public Class HomeworkAssignment {
@Id
private String id;
private final String yyyymmdd;
private final String uniqueStudentName;
private double homeworkGrade;
public HomeworkAssignment(String yyyymmdd, String uniqueStudentName) {
this.yyyymmdd = yyyymmdd;
this.uniqueStudentName = uniqueStudentName;
// can either set the 'id' here, or let Spring give me an artificial one.
}
// setter provided for the homeworkGrade
}
: 여기
은 예입니다. yyyymmdd와 uniqueStudentName 둘 다 String으로 나에게 주어집니다.예를 들어 "20120601bobsmith"는 2012 년 6 월 1 일에 Bob Smith의 숙제를 고유하게 식별합니다. (Bob Smith가 둘 이상인 경우 이미 주어진 고유 이름에서 처리됩니다.)
mongo 참조 정보에 따라 자연 기본 키를 사용한다고 가정합니다. 하나는 있지만 2 개의 필드를 조합 한 것입니다. 내가 그렇게 그들을 결합해야하는 경우인가?
this.id = yyyymmdd + uniqueStudentName.toLowerCase();
감사합니다! 나는 '합성 열쇠'를 찾기 위해 몰랐다. 그래서 나는 당신이 제공 한 질문을 놓쳤다. 궁극적으로, 나는 여분의 Java 클래스를 단지 ID로 사용한다고 생각하지만 몽고 사람들이 자연적인 기본 키를 사용하도록 제안했을 때 그 의미가 아닌 것 같다. unuqueStudentName과 yyyymmdd에 mongo가 지정한 ID와 고유 한 복합 색인을 사용하겠습니다. – rallison