2016-03-07 41 views
0

我有一个表中卡桑德拉具有类型MAP(即)source_id_map地图的列所致:javax.persistence.PersistenceException:org.apache.cassandra.serializers.MarshalException:地图值之后意外的外来字节

当我尝试从该表中读取一行,我看到有一些问题,在阅读地图类型的列如下

产生的原因:javax.persistence.PersistenceException: org.apache.cassandra.serializers。 MarshalException:意外的 地图值 在com.impetus.cli之后的无关字节ent.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) 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 ) 在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 $ CQLCli在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)

+0

请确保cql3启用在查询以及使用EntityManager的插入数据。 –

+0

@ChhaviGangwal我是cassandra以及kundera的新手。您能否让我知道如何确保启用cqls3? –

回答

1

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

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