我在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>()
答案 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