OrientDB(2.0.4)自定义序列化程序

时间:2015-03-06 16:37:57

标签: java orientdb

在使用OrientDB 2.0.4时遇到了以下问题:

我有以下课程

public class ClassA{

    private String someData;
    private ClassB embeddedClass;

}

public class ClassB implements Serializable{

    private Integer someData;
    private ClassC classToBeReferenced;

}

public class ClassC implements Serializable{

    private Boolean someData;
}

尽管ClassC不应嵌入ClassB中,但ClassB包含ClassC的实际实例,以便人们可以在ClassB上轻松设置ClassC实例(而不必处理OrientDB以获取ClassC实例的RID)。

此设置的问题是当序列化ClassB的实例时,OrientDB在ClassB中嵌入ClassC。为了避免我为ClassC创建自定义序列化程序:

public class ClassCSerializer implements OObjectSerializer<ClassC, ORID> {

    ....

}

我现在的问题是,我找不到任何方法在任何地方注册序列化器。我在OObjectSerializer的自定义实现中找到解决方案的教程说,序列化程序应该在OObjectSerializerContext中注册。但是,我在类路径上找不到类。我在类路径上的版本2.0.4中有orient-core,-client和-enterprise模块。

有人可以帮助我吗?

此致 帕斯卡

1 个答案:

答案 0 :(得分:1)

我不知道2.0.4,但对于2.0.10,OObjectSerializerContext位于orientdb-object-2.0.10.jar jar中。

我在这里找到了一个如何使用它的例子: https://code.google.com/p/orient/issues/detail?id=299

OObjectSerializerContext serializerContext = new OObjectSerializerContext();
serializerContext.bind(new OObjectSerializer<DateTime, Long>() {

public Long serializeFieldValue(Object iPojo, String iFieldName, DateTime iFieldValue)
{
    return iFieldValue.getMillis();
}

public DateTime unserializeFieldValue(Object iPojo, String iFieldName, Long iFieldValue)
{
    return new DateTime(iFieldValue);
}

});
OObjectSerializerHelper.bindSerializerContext(null, serializerContext);