卡桑德拉CodecNotFoundException:编解码器找不到请求的操作

我有我想要映射到一列卡桑德拉卡桑德拉CodecNotFoundException:编解码器找不到请求的操作

public enum MyEnum { 

Aa,

Bb,

Cc,

}

一个枚举领域,这是我如何注册它

CodecRegistry myCodecRegistry = new CodecRegistry(); 

myCodecRegistry.register(new EnumOrdinalCodec<MyEnum>(MyEnum.class));

cluster = Cluster.builder().addContactPoint(cassandraHosts).withPort(cassandraPort).withCodecRegistry(myCodecRegistry).build();

我是能够连接到cassandra就好了。下面是模型类

public class MyModel 

{

@PartitionKey

@Column(name="id")

private String id;

@ClusteringColumn

@Column(name="name")

private String name = "";

@Column(name="enum")

private MyEnum enum;

public MyModel(String i, String n)

{

id=i;

name=n

enum=MyEnum.Aa;

}

}

的片段,这里是我如何创建使用CQL

CREATE TABLE IF NOT EXISTS 

tab

(

name varchar ,

id varchar,

enum varchar,

PRIMARY KEY ((id), name));

最后,我有我的映射代码

manager = new MappingManager(session); 

mapper = manager.mapper(MyModel.class);

accessor = manager.createAccessor(MyAccessor.class);

这里是表MyAccessor

@Accessor 

public interface MyAccessor{

@Query("SELECT * FROM case WHERE id=? and name=? ALLOW FILTERING;")

MyModel readByIdAndName(String id,String name);

}

所以当我尝试执行

MyModel m = new MyModel("asdasf","qw"); 

mapper.save(m);

我得到

com.datastax.driver.core.exceptions.CodecNotFoundException: Codec not found for requested operation: [varchar <-> my.pack.MyEnum] 

at com.datastax.driver.core.exceptions.CodecNotFoundException.copy(CodecNotFoundException.java:56)

at com.datastax.driver.core.exceptions.CodecNotFoundException.copy(CodecNotFoundException.java:25)

at com.datastax.driver.mapping.DriverThrowables.propagateCause(DriverThrowables.java:41)

at com.datastax.driver.mapping.Mapper.save(Mapper.java:289)

我到底做错了什么?

回答:

EnumOrdinalCodec用于在int < - > Enum only之间映射。由于您的Enum基于字符串,因此请使用EnumNameCodec类。这两个编解码器类的Javadoc如下所示。希望能帮助到你。

EnumNameCodec

甲序列化枚举实例作为CQL VARCHAR处理表示由Enum.name作为返回 其程序名称编解码器()。

EnumOrdinalCodec

序列化枚举实例作为表示由Enum.ordinal作为返回其 序号值CQL整数A编码解码法()。

链接Javadoc

以上是 卡桑德拉CodecNotFoundException:编解码器找不到请求的操作 的全部内容, 来源链接: utcz.com/qa/266703.html

回到顶部