【发布时间】:2016-06-20 14:05:42
【问题描述】:
我在 cassandra 中有一个表,其中有一列类型为 MAP(即 source_id_map 映射)
当我尝试从该表中读取一行时,我发现在读取以下地图类型的列时存在一些问题
引起:javax.persistence.PersistenceException: org.apache.cassandra.serializers.MarshalException:意外 映射值后的无关字节 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setCollectionValue(CassandraDataHandlerBase.java:2526) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setFieldValueViaCQL(CassandraDataHandlerBase.java:1504) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1163) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653)
我注意到的另一个例外如下。
通过 CQL 检索 fieldUTF8Type 值时出错,原因:。 java.lang.IllegalArgumentException 在 java.nio.Buffer.limit(Buffer.java:267) 在 org.apache.cassandra.utils.ByteBufferUtil.readBytes(ByteBufferUtil.java:543) 在 org.apache.cassandra.utils.ByteBufferUtil.readBytesWithShortLength(ByteBufferUtil.java:552) 在 org.apache.cassandra.serializers.CollectionSerializer.readValue(CollectionSerializer.java:128) 在 org.apache.cassandra.serializers.MapSerializer.deserializeForNativeProtocol(MapSerializer.java:104) 在 com.impetus.client.cassandra.schemamanager.CassandraDataTranslator$MapTypeBuilder.decompose(CassandraDataTranslator.java:1177) 在 com.impetus.client.cassandra.schemamanager.CassandraDataTranslator$MapTypeBuilder.access$4800(CassandraDataTranslator.java:1100) 在 com.impetus.client.cassandra.schemamanager.CassandraDataTranslator.decompose(CassandraDataTranslator.java:507) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setCollectionValue(CassandraDataHandlerBase.java:2518) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setFieldValueViaCQL(CassandraDataHandlerBase.java:1504) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1163) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) 在 com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653) 在 com.impetus.client.cassandra.CassandraClientBase$CQLClient.executeQuery(CassandraClientBase.java:2272) 在 com.impetus.client.cassandra.CassandraClientBase.executeSelectQuery(CassandraClientBase.java:926) 在 com.impetus.client.cassandra.thrift.ThriftClient.executeQuery(ThriftClient.java:1062) 在 com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:153) 在 com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1377) 在 com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:200)
【问题讨论】:
-
请确保在使用EntityManager查询和插入数据时启用cql3。
-
@ChhaviGangwal 我是 cassandra 和 kundera 的新手。你能告诉我如何确保启用 cqls3 吗?