在使用 OrientDB 2.0.4 时,我遇到了以下问题:
我有以下类(class)
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 将 ClassC 嵌入到 ClassB 中。为了避免这种情况,我为 ClassC 创建了一个自定义序列化器:
public class ClassCSerializer implements OObjectSerializer<ClassC, ORID> {
....
}
我现在的问题是,我找不到任何方法在任何地方注册序列化器。我找到 OObjectSerializer 自定义实现的解决方案的教程说序列化器应该在 OObjectSerializerContext 中注册。但是,我在类路径上找不到该类。我的类路径上有版本 2.0.4 的 orient-core、-client 和 -enterprise 模块。
有人可以帮我吗?
问候, 帕斯卡
最佳答案
嗯,我不知道 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);
关于java - OrientDB (2.0.4) 自定义序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903353/