java - 无法序列化包含 orientdb 记录 ID 的映射

标签 java nosql orientdb

刚刚将 orientdb 从 v2.1.19 迁移到 v3.0.2,我使用的代码存在问题。

现在基本上这样做会引发强制转换异常:

Map<String, String> myMap = vertex.getProperty("myMap");
String test = new ObjectMapper().writeValueAsString(myMap);

地点

  • myMap :orientdb 数据库中 vertex 顶点的嵌入 map 属性。
  • ObjectMapper :com.fasterxml.jackson.databind.ObjectMapper Jackson 提供的序列化器。

完整错误标签:com.fasterxml.jackson.databind.JsonMappingException:com.orientechnologies.orient.core.id.ORecordId无法转换为java.lang.String

为什么ORecordId不能再转换为String

我看到的唯一解决方案:检测 map 中是否存在 ORecordId 并将其手动转换为 String。这似乎不适合我。

最佳答案

我使用的解决方案(我不太喜欢它)

我创建了一个方法,将检索到的属性处理为 Map<String, Object>

public static Map<String, String> convertToStringMap(Map<String, Object> map) {
    if (map == null)
        return null;
    return map.entrySet().stream().collect(Collectors.toMap(
            entry -> entry.getKey(), 
            entry -> entry.getValue().toString()));
}

然后我可以将嵌入的 map 检索为 Map<String, String>这边走

Map<String, String> myMap = convertToStringMap(vertex.getProperty("myMap"))

// Do something with
// (both throw an exception if no passed through convertToStringMap)
String test = new ObjectMapper().writeValueAsString(myMap); // serialize
System.out.println(my.get("anEntryKey")); // print

关于java - 无法序列化包含 orientdb 记录 ID 的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51267658/

相关文章:

google-cloud-platform - 抛开价格不谈,为什么选择 Google Cloud Bigtable 而不是 Google Cloud Datastore?

java - 清除 OrientDB 数据库

java - JPA - 仅当方法为@Transactional 时才更新数据库

Java 线程和内核数

php - 需要一个带有 php 的 DynamoDB 的完整示例

C# - 没有带有动态对象建议的 SQL 数据库

javascript - OrientDB No database instance found in context 错误?

javascript - OrientDB:如何在服务器端函数中检查查询结果是否不为空?

java - 为什么 String 类不可克隆?

java - 使用java查找文本文件中单词的行号