【问题标题】:Caused by: javax.persistence.PersistenceException: org.apache.cassandra.serializers.MarshalException: Unexpected extraneous bytes after map value引起:javax.persistence.PersistenceException:org.apache.cassandra.serializers.MarshalException:映射值后出现意外的无关字节
【发布时间】: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 吗?

标签: java cassandra kundera


【解决方案1】:

请在插入和读取数据时启用 CQL3

Map propertyMap = new HashMap();
propertyMap.put(CassandraConstants.CQL_VERSION, CassandraConstants.CQL_VERSION_3_0);
EntityManagerFactory emf = Persistence.createEntityManagerFactory("cassandra-pu",propertyMap);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2021-05-18
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2018-05-27
    相关资源
    最近更新 更多