考慮類:手冊參考支持
class Person {
String name;
Person father;
Person mother;
List<Person> children;
}
有沒有一種方法來指示jongo是father
,mother
和children
應該manual references到其他對象相同的集合,而不是嵌入對象內?請注意:這與DBRefs有所不同。
考慮類:手冊參考支持
class Person {
String name;
Person father;
Person mother;
List<Person> children;
}
有沒有一種方法來指示jongo是father
,mother
和children
應該manual references到其他對象相同的集合,而不是嵌入對象內?請注意:這與DBRefs有所不同。
還沒有。
最簡單的方法是手動發出第二個查詢。不過,你可以在解組過程中創建一個Jackson de/serializer來獲取文檔。 幾個月前,我們已經創造了unmarhsalling期間獲取DBREF秒殺,這個代碼可以幫助:Handle DBRef during (un)marshalling
隨意添加一個feature request
我用一種方法來處理它。不確定它是完美的,但它適用於我自己。
比方說,你有這些類
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;
}
}
你要「嵌入」和對象存儲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();
}
}
如果您登記參加Jongo序列化,問題是,這將被用於MyEmbeddedObject作爲成員MyObject,但也可以在MyEmbeddedObject自己存儲在「嵌入」集合中時使用。
要僅在MyEmbeddedObject嵌入到MyOBject中時應用自定義的serizalizers /反序列化器,我使用Mixin註釋。
public interface MyObjectMixIn {
@JsonSerialize(using=MyEmbeddedObjectSerializer .class)
public MyEmbeddedObject getEmbeddedObject();
@JsonDeserialize(using=MyEmbeddedObjectDeserializer.class)
public void setEmbeddedObject(MyEmbeddedObject embeddedObject);
}
然後在Jongo
定義模塊public class MyModule extends SimpleModule {
@Override
public void setupModule(SetupContext context) {
context.setMixInAnnotations(MyObject.class, MyObjectMixIn.class);
}
}
Finaly註冊模塊
Jongo jongo = new Jongo(db, JacksonMapper.Builder().registerModule(new MyModule()).build());
現在,通過自己使用它存儲在蒙戈
,並讀取數據存儲
編輯:避免遲緩裝載並且在反序列化加載完整的對象,從傑克遜HandlerInstantiator目的是定製串行器和解串施工機制是有用的。
希望有所幫助。