Cassandra Java驱动程序3 EnumNameCodec

问题描述:

我正在从Cassandra 2.1迁移到v3,因此使用新的Java Driver v3。 对已由驱动程序附加模块EnumOrdinalCodec和EnumNameCodec交换的@Enumerated(EnumType.STRING)或ORDINAL进行了更改。Cassandra Java驱动程序3 EnumNameCodec

在我的项目我有:

@Column(name = "myColumn") 
    @Enumerated(EnumType.STRING) 
    private myEnum   currentMyEnum   ; 

我查找了有关如何使用他们,但并没有真正了解他们是如何工作的一些例子。 我发现的主要信息是这样的例子:

enum Foo {...} 
enum Bar {...} 

// register the appropriate codecs 
CodecRegistry.DEFAULT_INSTANCE 
    .register(new EnumOrdinalCodec<Foo>(Foo.class)) 
    .register(new EnumNameCodec<Bar>(Bar.class)) 

// the following mappings are handled out-of-the-box 
@Table 
public class MyPojo { 
    private Foo foo; 
    private List<Bar> bars; 
    ... 
} 

哪一个不清楚。看起来他们把枚举,编解码器和DAO模型放在同一个文件中。在我的项目中,枚举和DAO模型文件不同,当我尝试将“CodecRegistry.DEFAULT_INSTANCE.register(new EnumOrdinalCodec(myEnum.class))”放在etheir enum或DAO文件中时,IDE Eclipse中出现错误。

如果有人可以帮助我如何chnage @Enumerated(EnumType.STRING)使用EnumNameCodec预先感谢。

看起来他们把枚举,编解码器和DAO模式在同一个文件

这只是一个代码示例。在一个真实的项目中,这3个代码块被放到不同的文件中

当您创建Cluster对象时,您可以注册一个编解码器注册表(使用new CodecRegistry创建一个)。此编解码器注册表将负责将非本地类型(如Java枚举类型)转换为支持的CQL Java类型。

例如通过注册new EnumOrdinalCodec<Foo>(Foo.class),您可以使用枚举Foo在任何Java豆(即使集合内的类似名单<美孚>)和对象映射器将自动检测存在的枚举Foo转换成CQL整数编解码器代码

+0

非常感谢你的回答,真正帮助我。我完全是数据库和noSQL的新手,我不知道如何注册一个编解码器注册表。如果你有代码的例子,我会很高兴看到。提前致谢。 –

实例注册自定义的编解码器(从司机采取DOC):

Cluster cluster = Cluster.builder()..... ; //Create the cluster singleton somewhere 

// Create the enum codec 
EnumOrdinalCodec<Foo> myEnumCodec = new EnumOrdinalCodec<Foo>(Foo.class) 

// Retrieve the codec registry from the cluster configuration 
// IF you didn't configure any codec registry, a default empty codec registry 
// will be returned 
CodecRegistry myCodecRegistry = cluster.getConfiguration().getCodecRegistry(); 

// Register your codec here 
myCodecRegistry.register(myEnumCodec); 
+0

我已经尝试过,并且还在emum中直接静态存储“CodecRegistry.DEFAULT_INSTANCE .register(new EnumOrdinalCodec (myEnum.class))”。在尝试存储数据时都会提供该结果:找不到请求操作的编解码器:[varchar com.path.path.common.pojo.myEnum] –

+0

对不起,看起来像我错过了导入。 Doanduyhai描述的作品。谢谢你的帮助。 –