java - OrientDB (2.0.4) 自定义序列化器

标签 java orientdb

在使用 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/

相关文章:

java - java中的隐式缩小规则

java - Spring可以初始化 "non-bean"字段吗?

java - 绑定(bind)参数太多。提供了 5 个参数,但语句需要 4 个参数

java - 无法加载 OrientDB rw - "Cannot load database' s 配置。数据库似乎已损坏。”

node.js - OrientJS:将二进制数据与 "normal"属性一起存储

java - 在执行线程上运行 Spring 方面建议

java - OrientDB - 插入后不释放内存

java - OrientDB Java jdbc 抛出 MethodNotFound

java - 尝试通过控制台浏览类时出现 OrientDB 错误

java - Postgres - 杀死未提交的事务