Nay*_*yan 11 enums cassandra cassandra-2.0
我正在尝试将我的数据库从MySQL迁移到Cassasndra.我面临的问题是其中一个列类型定义为Enum(枚举('GP','NGP','PGP','PAGP')).Cassandra不支持Enum数据类型(但它支持集合).有没有办法在Cassandra中实现Enum数据类型,因此应该从一组值中限制列的值?我正在使用Apache Cassandra 2.0.7版.
ahl*_*hll 10
请参阅datastax cassandra对象映射API,
http://docs.datastax.com/en/developer/java-driver/2.1/java-driver/reference/crudOperations.html
enum Gender { FEMALE, MALE };
// FEMALE will be persisted as 'FEMALE'
@Enumerated(EnumType.STRING)
private Gender gender;
// FEMALE will be persisted as 0, MALE as 1
@Enumerated(EnumType.ORDINAL)
private Gender gender
Run Code Online (Sandbox Code Playgroud)
对于cassandra 3.0
enum State {INIT, RUNNING, STOPPING, STOPPED}
cluster.getConfiguration().getCodecRegistry()
.register(new EnumNameCodec<State>(State.class));
// schema: create table name_example(id int PRIMARY KEY, state text)
session.execute("insert into name_example (id, state) values (1, ?)", State.INIT);
// state is saved as 'INIT'
Run Code Online (Sandbox Code Playgroud)
http://docs.datastax.com/en/developer/java-driver/3.1/manual/custom_codecs/extras/
据我所知,在阅读有关cql类型的文档后,你不能直接在cql语句中使用enum(我为java客户端检查了这个).
因此,您拥有的选项是将Enum转换为String以在cql语句中包含该字段.通过这种方式,所有应用程序都使用Enum,但在后端层使用枚举的字符串表示.