考虑类:手册参考支持
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目的是定制串行器和解串施工机制是有用的。
希望有所帮助。