用于将bigint转换为Long的编解码器是什么?

时间:2017-03-30 19:26:52

标签: cassandra datastax datastax-java-driver

我在Cassandra中有一个bigint字段,我希望将其转换为long值。 但是,我不确定如何在我的DataStax-mapper-entity-class中指定相同的内容。

以下是代码:

@PartitionKey(1)
@Column(name="phone", codec=TypeCodec.)
private Double phoneNumber;

有人可以告诉我们在列注释中使用什么吗?

更新
如果我使用

@PartitionKey(1)
@Column(name="phone")
private Long phoneNumber;

我收到错误:java.lang.Double cannot be cast to java.lang.Long

如果我使用

@PartitionKey(1)
@Column(name="phone")
private Double phoneNumber;

我收到错误:Codec not found for requested operation: [bigint <-> java.lang.Double]

长或双对我来说并不重要。
我只是希望能够将其作为数字阅读。

我也尝试过:

@PartitionKey(1)
@Column(name="phone", codec=TypeCodec.PrimitiveDoubleCodec.class)
private Double phoneNumber;

但是它给了我一个错误:java.lang.NoSuchMethodException: com.datastax.driver.core.TypeCodec$PrimitiveDoubleCodec.<init>()

1 个答案:

答案 0 :(得分:2)

默认情况下Cassandra bigint类型映射到java long类型,所以如果你在cassandra中将phone定义为bigint,那么你必须在java中定义phone。如果你想将bigint映射到Double,你必须编写自定义编解码器。

这是CQL到Java类型映射:

--------------------------------
| CQL3 data type  | Java type   |
--------------------------------|
| bigint          | long        |
| double          | double      |
---------------------------------

来源:http://docs.datastax.com/en/developer/java-driver/3.1/manual/#cql-to-java-type-mapping