我们在代码中使用了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;
1条答案
按热度按时间sxpgvts31#
从错误中可以看出,相应的列具有类型
text
,而不是map<text, text>
-更改表的定义或调整变量类型。也许你有json字符串而不是真正的CassandraMap?在这种情况下,您可以使用一个现有的json编解码器。