2017-05-30 64 views
0

我正在尝试将Ignite和Cassandra集成。我将持久性策略用作BLOB。当我运行该程序时,它显示一个错误,如“com.datastax.driver.core.exceptions.CodecNotFoundException:Codec not found for requested operation:[varchar < - > java.nio.HeapByteBuffer] at com.datastax.driver.core。 CodecRegistry.notFound(CodecRegistry.java:679) “点亮Cassandra集成

这里是我的坚持xml文件

<persistence keyspace="sam" table="key"> 
<keyPersistence class="java.lang.String" strategy="BLOB" column="key"/> 
<valuePersistence class="java.lang.String" strategy="BLOB" column="value"/> 
</persistence> 

的main.cpp

int main() 
{ 
IgniteConfiguration cfg; 
cfg.springCfgPath = "apache-ignite-fabric-2.0.0-bin/cassandra-config.xml"; 
Ignite grid = Ignition::Start(cfg); 
Cache<Test, Test> cache = grid.GetCache<Test, Test>("cache1"); 
Test obj; 
cache.LoadCache(); 
Test key; 
key.key = "123dfsdfs"; 
obj.value = "sdfsf"; 
cache.Put (key,obj); 
return 0; 
} 

回答

1

错误意味着卡桑德拉列的类型是varchar,但你正在尝试写入一个BLOB。因此失败。

但是为什么您使用BLOB字符串策略?您可以使用PRIMITIVE替代策略,将字符串原样写入varchar列。

+0

当我改变策略,它工作正常的字符串:)。但实际上我想用一个类来代替“java.lang.String”。所以我只是改变了keyPersistence class =“com.test.Test”。它显示其他错误,如“由...引发:java.lang.IllegalStateException:无法序列化类的对象'com.test.Test'引起:java.io.NotSerializableException:com.test.Test” –

+1

我相信这是因为'测试'不是'Serializable' :) –

+0

如果我将策略更改为POJO,是否可以实现相同的结果? (如果我使用POJO,那么我可以避免序列化的权利?) –