>java.util.map< java.lang.string,java.lang.string>

hm2xizp9  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(647)

我们在代码中使用了dse驱动程序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;
sxpgvts3

sxpgvts31#

从错误中可以看出,相应的列具有类型 text ,而不是 map<text, text> -更改表的定义或调整变量类型。
也许你有json字符串而不是真正的CassandraMap?在这种情况下,您可以使用一个现有的json编解码器。

相关问题