【发布时间】: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,其他没有地图列的实体正在工作。
【问题讨论】: