cassandra datastac Codec not found varchar <-> java.util.Map<java.lang.String, java.lang.St
Posted
技术标签:
【中文标题】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;
【问题讨论】:
【参考方案1】:从错误看来,相应列的类型为text
,而不是map<text, text>
- 要么更改表的定义,要么调整变量类型。
也许你有 JSON 字符串而不是真正的 Cassandra 地图?在这种情况下,您可以使用existing JSON codecs 之一。
【讨论】:
我也面临类似的错误。我的专栏是 map以上是关于cassandra datastac Codec not found varchar <-> java.util.Map<java.lang.String, java.lang.St的主要内容,如果未能解决你的问题,请参考以下文章
xml Java中的Soundex。 jar:http://mvnrepository.com/artifact/commons-codec/commons-codec/1.1