【问题标题】:cassandra datastac Codec not found varchar <-> java.util.Map<java.lang.String, java.lang.String>cassandra datastac Codec not found varchar <-> java.util.Map<java.lang.String, java.lang.String>
【发布时间】:2020-02-27 04:51:16
【问题描述】:

我们在代码中使用了 dse-driver 1.8.2,我将实体定义为:

public class HistoryByEmail implements Serializable {
  ...
  @Column(name = ADDITIONAL_DATA)
  private Map<String, String> additionalData;
}

当我尝试从该列中读取值时,出现此错误:

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [varchar <-> java.util.Map<java.lang.String, java.lang.String>]

我在该列添加了编解码器:

  @Column(name = ADDITIONAL_DATA, codec = TypeCodec.MapCodec.class)
  private Map<String, String> additionalData;

但是代码不会被编译,也尝试了以下方法,它们都不起作用:

  @Column(name = ADDITIONAL_DATA, codec = TypeCodec.AbstractMapCodec<String, String>.class)
  private Map<String, String> additionalData;

  @Column(name = ADDITIONAL_DATA, codec = TypeCodec.AbstractMapCodec<>.class)
  private Map<String, String> additionalData;

【问题讨论】:

    标签: java cassandra datastax datastax-java-driver


    【解决方案1】:

    从错误看来,相应列的类型为text,而不是map&lt;text, text&gt; - 要么更改表的定义,要么调整变量类型。

    也许你有 JSON 字符串而不是真正的 Cassandra 地图?在这种情况下,您可以使用existing JSON codecs 之一。

    【讨论】:

    • 我也面临类似的错误。我的专栏是 map> Codec not found for requested operation: [Map(TEXT => UDT(dev.cpu_info), not freeze)
    • 以前的版本有注释@FrozenValue,在新版本中似乎没有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2015-03-06
    • 2018-10-16
    • 1970-01-01
    • 2021-09-01
    • 2021-11-25
    相关资源
    最近更新 更多