내가 그것을 처리하는 방법을 사용하여 추가하시기 바랍니다. 완벽하지는 않지만 자신을 위해 작동합니다.
의 당신이 이러한 클래스 당신은 설명서를 참조에 "삽입"모음의 ID로 컬렉션 컬렉션 "개체"를 "삽입"및 개체 MyEmbeddedObject을 저장할
public class MyObject {
@Id
private String id;
private MyEmbeddedObject embeddedObject;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public MyEmbeddedObject getEmbeddedObject() {
return this.embeddedObject;
}
public void setEmbeddedObject(MyEmbeddedObject embeddedObject) {
this.embeddedObject = embeddedObject;
}
}
public class MyEmbeddedObject {
@Id
private String id;
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
}
있다고 가정 해 봅시다. 예를 들어 : Jongo에 등록하여 시리얼 라이저는, 문제는 그것이의 구성원으로 MyEmbeddedObject에 사용될 것입니다 경우
object : { id:1, embeddedObjectId: 99 }
embed : { id : 99 }
당신은 MyEmbeddedObject에 대한 사용자 정의 시리얼 라이저 및 디시리얼라이저
public class MyEmbeddedObjectSerializer extends JsonSerializer<MyEmbeddedObject> {
@Override
public void serialize(MyEmbeddedObject value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeText(value.getId());
}
}
public class MyEmbeddedObjectDeserializer extends JsonDeserializer<MyEmbeddedObject> {
@Override
public MyEmbeddedObject deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
MyEmbeddedObject obj = new MyEmbeddedObject();
obj.setId(jsonParser.getString());
return new MyEmbeddedObject();
}
}
을 구현할 수 있습니다 MyObject뿐만 아니라 MyEmbeddedObject 자체가 "embed"컬렉션에 저장 될 때도 마찬가지입니다.
MyEmbeddedObject가 MyOBject에 포함 된 경우에만 사용자 정의 세리 라이자/디시리얼라이저를 적용하려면 Mixin 주석을 사용합니다.
public interface MyObjectMixIn {
@JsonSerialize(using=MyEmbeddedObjectSerializer .class)
public MyEmbeddedObject getEmbeddedObject();
@JsonDeserialize(using=MyEmbeddedObjectDeserializer.class)
public void setEmbeddedObject(MyEmbeddedObject embeddedObject);
}
다음 지금
Jongo jongo = new Jongo(db, JacksonMapper.Builder().registerModule(new MyModule()).build());
자체로 몽고
- 저장합니다 embeddedObject에 저장을 위해 사용하는 Jongo에 등록 모듈을 모듈 마침내
public class MyModule extends SimpleModule {
@Override
public void setupModule(SetupContext context) {
context.setMixInAnnotations(MyObject.class, MyObjectMixIn.class);
}
}
정의 컬렉션에서 "embed"ID를 얻으려면
- object의 embeddedObject 멤버에 id가 포함되어 있는지 확인하십시오.
- "object"컬렉션에 개체를 저장하십시오.만 포함 된 개체의 id는
을 저장됩니다 및 수집 "개체"에서 개체를 읽기
- 데이터 저장소을 읽을 수 있습니다. 임베디드 객체는 해당 ID로만 초기화됩니다.
- 필요한 경우 컬렉션 "임베드"에서 임베디드 객체를 읽습니다.
편집 : 게으른 로딩을 방지하고 직렬화에 전체 개체를로드하기 위해, 잭슨 HandlerInstantiator 목적은 시리얼 라이저 및 디시리얼라이저 건설 메커니즘을 정의하는 데 유용합니다.
희망이 있습니다.