java - 由 : javax. persistence.PersistenceException : org. apache.cassandra.serializers.MarshalException 引起:映射值后出现意外的无关字节

标签 java cassandra kundera

我在 cassandra 中有一个表,其中有一列 MAP 类型(即 source_id_map map )

当我尝试从此表中读取一行时,我发现读取 map 类型的列时出现一些问题,如下所示

Caused by: javax.persistence.PersistenceException: org.apache.cassandra.serializers.MarshalException: Unexpected extraneous bytes after map value at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setCollectionValue(CassandraDataHandlerBase.java:2526) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setFieldValueViaCQL(CassandraDataHandlerBase.java:1504) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1163) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653)

我注意到的另一个异常如下。

Error while retrieving fieldUTF8Type value via CQL, Caused by: . java.lang.IllegalArgumentException at java.nio.Buffer.limit(Buffer.java:267) at org.apache.cassandra.utils.ByteBufferUtil.readBytes(ByteBufferUtil.java:543) at org.apache.cassandra.utils.ByteBufferUtil.readBytesWithShortLength(ByteBufferUtil.java:552) at org.apache.cassandra.serializers.CollectionSerializer.readValue(CollectionSerializer.java:128) at org.apache.cassandra.serializers.MapSerializer.deserializeForNativeProtocol(MapSerializer.java:104) at com.impetus.client.cassandra.schemamanager.CassandraDataTranslator$MapTypeBuilder.decompose(CassandraDataTranslator.java:1177) at com.impetus.client.cassandra.schemamanager.CassandraDataTranslator$MapTypeBuilder.access$4800(CassandraDataTranslator.java:1100) at com.impetus.client.cassandra.schemamanager.CassandraDataTranslator.decompose(CassandraDataTranslator.java:507) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setCollectionValue(CassandraDataHandlerBase.java:2518) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.setFieldValueViaCQL(CassandraDataHandlerBase.java:1504) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateViaThrift(CassandraDataHandlerBase.java:1163) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.onColumn(CassandraDataHandlerBase.java:1054) at com.impetus.client.cassandra.datahandler.CassandraDataHandlerBase.populateEntity(CassandraDataHandlerBase.java:653) at com.impetus.client.cassandra.CassandraClientBase$CQLClient.executeQuery(CassandraClientBase.java:2272) at com.impetus.client.cassandra.CassandraClientBase.executeSelectQuery(CassandraClientBase.java:926) at com.impetus.client.cassandra.thrift.ThriftClient.executeQuery(ThriftClient.java:1062) at com.impetus.client.cassandra.query.CassQuery.populateEntities(CassQuery.java:153) at com.impetus.kundera.query.QueryImpl.fetch(QueryImpl.java:1377) at com.impetus.kundera.query.QueryImpl.getResultList(QueryImpl.java:200)

最佳答案

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

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

关于java - 由 : javax. persistence.PersistenceException : org. apache.cassandra.serializers.MarshalException 引起:映射值后出现意外的无关字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35836693/

相关文章:

Cassandra Upsert 不适用于每列

cassandra - 使用 cql 相对于 thrift 的优点

java - OneToMany 与 @EmbeddedId 和 kundera

mongodb - 如何连接mongodb和Informix服务器

java - JPA2 与 HBase 数据存储使用 Datanucleus 写入重复行

Java 和 Espresso - 无法输入,需要支持输入法或可从类 : class SearchView 分配

java - 在子类编译错误 : Unreachable catch block for CloneNotSupportedException

java - 无法将java类的对象放在另一个类中

java - Swing Matisse GUI - 无法将定制 bean 添加到 "Other components"

围绕电子邮件系统的 Cassandra 数据建模