我有一个Java类,它使用datastax cassandra驱动程序将pojo写入cassandra表。一切正常,直到必须将一个类对象写入cassandra表。它抛出了这个错误:
引起:com.datastax.driver.core.exceptions.CodecNotFoundException:找不到请求操作的编解码器:[frozen< projKeySpace.smi> < - > code.generic.common.data.MyCustomSmiObject]
所以我尝试了很多不同的东西尝试使属性“冻结”,但没有任何作用,我不断得到同样的错误。以下是类对象的示例。
@Table(keyspace="projkeyspace", name="summarytable")
public class DataGroupingObject implements Serializable {
@Column(name = "objid")
private String objId;
@Column(name = "timeofjob")
private Date timeOfJob;
@Column(name = "smiobjectinput")
@Frozen
//Have also tried:
//@Frozen("frozen<projKeySpace.smi>")
//@Frozen("frozen<smi>")
//@Frozen("frozen<MyCustomSmiObject>")
//And all other permutations I can think of...
private MyCustomSmiObject myCustomSmiObject; //The problem attribute
@Column(name = "column5")
private String dataForColumn5;
//Getters and setters....
}
那我在俯瞰什么?深入研究数据传输文档并没有显示出这一点http://docs.datastax.com/en/drivers/java/2.2/com/datastax/driver/mapping/annotations/Frozen.html,我试过了。
我也试过将MyCustomSmiObject映射到冻结的'projkeyspace.smi'并且不起作用(当然我不认为它会因为cassandra实际上没有一个名为smi的表,只是一种类型)但这里有一个例子:
@Table(keyspace="projkeyspace", name="smi")
public class MyCustomSmiObject implements Serializable {
@Column(name = "idstring")
private String idString;
@Column(name = "valuenum")
private Double valueNum;
//Getters and Setters....
}
就像我说的那样,我很茫然。任何帮助将不胜感激,并提前感谢!
答案 0 :(得分:1)
smi
是UDT不是吗?在这种情况下,MyCustomSmiObject
应使用@UDT(keyspace="projkeyspace", name="smi")
而不是@Table
进行注释。通过这样做,驱动程序应该检测到这是一个UDT并且它将为它注册一个自定义编解码器,这将允许它能够正确地序列化和反序列化它。
另一方面,@Frozen
注释当前对映射器没有影响,它只是信息,直到映射器支持模式生成。