Im currently working with Apache Cassandra (Cassandra version: 1.2.3, Thrift API version: 19.35.0, CQL supported versions: 2.0.0,3.0.1 (default: 3.0.1)) and Hector 1.0.5.
Im using the following code to insert and retrieve an Object.
String cf="User";
key="myKey";
String colName="colName";
String colValue="colvalue";
Mutator<String> mutator = HFactory.createMutator(keyspace, StringSerializer.get());
mutator.insert(key, cf, HFactory.createStringColumn(colName, colValue));
ColumnQuery<String, String, Object> columnQuery = HFactory.createColumnQuery(
keyspace,
StringSerializer.get(),
StringSerializer.get(),
ObjectSerializer.get());
columnQuery.setColumnFamily(cf).setKey(key).setName(colName);
QueryResult<HColumn<String, Object>> r = columnQuery.execute();
System.out.println("Read HColumn from cassandra: " + r.get());
But I get the following exception:
Exception in thread "main" me.prettyprint.hector.api.exceptions.HectorSerializationException: java.io.StreamCorruptedException: invalid stream header: 636F6C76
at me.prettyprint.cassandra.serializers.ObjectSerializer.fromByteBuffer(ObjectSerializer.java:79)
at me.prettyprint.cassandra.model.HColumnImpl.getValue(HColumnImpl.java:124)
at me.prettyprint.cassandra.model.HColumnImpl.toString(HColumnImpl.java:202)
at java.lang.String.valueOf(String.java:2854)
at java.lang.StringBuilder.append(StringBuilder.java:128)
at org.dargamenteria.tfg.texu.logic.UserDAOImpl.create(UserDAOImpl.java:111)
But the following code works, just changed the ObjectSerializer to StringSerializer:
Mutator<String> mutator = HFactory.createMutator(keyspace, StringSerializer.get());
mutator.insert(key, cf, HFactory.createStringColumn(colName, colValue));
ColumnQuery<String, String, String> columnQuery = HFactory.createColumnQuery(
keyspace,
StringSerializer.get(),
StringSerializer.get(),
StringSerializer.get());
columnQuery.setColumnFamily(cf).setKey(key).setName(colName);
QueryResult<HColumn<String, String>> r = columnQuery.execute();
System.out.println("Read HColumn from cassandra: " + r.get());