2014-02-11 3 views
6

RDBMS 세계와 MongoDB의 신비한 바다를 탐험 중입니다. 내 모험을 돕기 위해 봄 데이터를 사용하고 있습니다.ObjectId 필드를 String으로 Propper로 매핑

public class User { 
    @Id 
    private String id; 
    private String name; 
    private String password; 
    ... 
} 



public class Game { 
    @Id 
    private String id; 
    private String name; 
    private String platform; 
    private String userID; 
    ... 
} 

사용자 아이디는 기존 사용자의 ID이며, 그것은으로 저장된 : 나는 (내가 DBREFS 비싼 것을 읽었습니다)이 컬렉션에 문서 사이 수동으로 참조를 만들 필요가 내 POJO를이처럼 데이타베이스 내의 ObjectId 게임 문서를 검색 할 때 userID 필드가 String 값에 올바르게 매핑되지만 스프링 데이터가 역 매핑 (ObjectId String)을 수행 할 때 역 매핑을 수행하기를 원하며이를 수행하는 방법을 모릅니다.

누군가가 저와 함께 올바른 방향으로 나를 가리킬 수 있습니까? 이 접근법을 포기하고이 필드를 String으로 직접 저장하는 쉬운 솔루션으로 가야합니까?

고맙습니다.

+0

userId와 일치하는 사용자 정보를 자동으로 가져올 수 있습니까? 당신은 데이터베이스에서 게임 pojo를 나열하거나 여분의 매핑 코드를해야합니까? 도와주세요. –

답변

5

기본적으로 spring-data-mongodb를 사용할 때 Spring은 MappingMongoConverter을 사용하여 도메인 객체를 | 문서에서. ID 속성에 대한

기본 컨버터 정책은 다음과 같습니다

'_id'문서 필드에 매핑 될 내용 필드에 다음 개요 : @Id (조직 주석

필드입니다. springframework.data.annotation.Id)는 '_id'필드에 매핑됩니다. 주석이없고 이름이 지정된 필드는 '_id'필드에 매핑됩니다. 다음은 _id 문서 필드에 매핑 된 속성에서 어떤 유형 변환이 수행되는지 설명합니다.

'id'라는 필드가 Java 클래스의 String 또는 BigInteger로 선언되면 가능하면 ObjectId로 변환되어 저장됩니다. 필드 유형으로서의 ObjectId도 유효합니다.

이 변환은 다른 표준 속성에는 기본적으로 수행되지 않습니다. 그래서 당신은 userID 필드 ObjectId로 저장하려면 단순히 필드 유형 변경 : private ObjectId userID;가 oposite의 경우는 MongoDB의에서 문자열로 Userid 속성을 저장하려는 경우 덜 간단하지 않는 것이

, 사용자가 제공해야 할 것이다 writeInternal 메소드를 덮어 쓰는 매핑 변환기 (변환해서는 안되는 것을 의미하는) 또는 다른 Spring MongoDB 배관 작업 Bean을 오버라이드하여 변환 프로세스

+0

감사합니다. orid, 당신의 설명이 정말로 나를 위해 명확 해졌습니다. 정말 도움이되었습니다. 나는 너의 충고를 따를 것이다. – CescGarcia

+0

@Ori Dar, "id"속성을 가진 도메인 클래스가 있지만 주석이 없습니다. mongo db 문서를 체크인했을 때 id와 _id가 다른 값을 가지지 만 스프링 데이터를 통해 데이터를 검색 할 때 id 속성은 _id 값으로 설정됩니다. 몽고에있는 이드의 실제 가치를 어떻게 얻을 수 있습니까? 참고 : Google 시스템에서 여기에 데이터를 삽입하지 않습니다. –

+0

@NaveenChappa는 기본적으로'@Id String _id;'와'@Field ("id") String id;'를 시도 할 수 있습니다. 그러나 이것은 별도의 질문이기 때문에 여러분의 샘플과 clas를 포함하여 게시하십시오 –