【问题标题】:Kundera Cassandra - mapping a mapKundera Cassandra - 绘制地图
【发布时间】:2016-01-27 16:27:34
【问题描述】:

在我的 cassandra (V 3.0.1) 架构中,我有一个带有地图类型的列。 列族:

CREATE TABLE test.Test (
  id uuid,
  targetMisc map<text, double>,
  PRIMARY KEY (id));

我将 Kundera (V3.2) 与 com.impetus.client.cassandra.thrift.ThriftClientFactory 一起使用,我的测试实体如下所示:

@Entity
@Table(name="test")
public class Test implements Serializable {

    private static final long serialVersionUID = -7665632851374123059L;

    @Id
    @Column
    private UUID id;


    @Column(name="targetmisc")
    private Map<String, BigDecimal> targetMisc;

}

当我想通过以下方式查询Test表中的数据时

EntityManager manager = entityManagerFactory.createEntityManager(getProperties());
result = new manager.find(Test.class, id); 

我收到地图无法映射的错误。

堆栈跟踪:

16:26:34.165 [http-bio-8080-exec-3] ERROR e5bc0aec-802b-459f-a24e-675037811135 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase - Error while setting fieldtargetMisc value via CQL, Caused by:
org.apache.cassandra.serializers.MarshalException: Unexpected extraneous bytes after map value
at org.apache.cassandra.serializers.MapSerializer.deserializeForNativeProtocol(MapSerializer.java:109) ~[cassandra-all-2.2.2.jar:2.2.2]

没有人知道问题出在哪里吗?我使用 CQL 版本 3,其他没有地图列的实体正在工作。

【问题讨论】:

标签: cassandra kundera


【解决方案1】:

我找到了解决这个问题的方法。当使用 Cassandra 2.2 而不是 3.0 并将 private Map&lt;String, BigDecimal&gt; targetMisc; 更改为 private Map&lt;String, Double&gt; targetMisc; 时,映射可以正常工作。

那里接缝 Kundera 3.2 确实与 Cassandra 的版本 3 有问题。 Kundera 使用 cassandra-driver-core-2.1.5.jar 并引用此 http://docs.datastax.com/en/developer/driver-matrix/doc/common/driverMatrix.html?scroll=driverMatrix__driver-cmpt-matrix 与该版本的 java 驱动程序不兼容。

编辑:在这里 (Kundera compatibility with Cassandra 3.0.1) 你可以看到 Kundera 2.2 没有完全支持 Cassandra 3。*

【讨论】:

    猜你喜欢
    • 2016-01-15
    • 2018-10-11
    • 2012-07-16
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多