Java / Cassandra在制作Frozen属性时抛出错误

时间:2017-04-06 14:47:51

标签: java cassandra

我有一个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....
}

就像我说的那样,我很茫然。任何帮助将不胜感激,并提前感谢!

1 个答案:

答案 0 :(得分:1)

smi是UDT不是吗?在这种情况下,MyCustomSmiObject应使用@UDT(keyspace="projkeyspace", name="smi")而不是@Table进行注释。通过这样做,驱动程序应该检测到这是一个UDT并且它将为它注册一个自定义编解码器,这将允许它能够正确地序列化和反序列化它。

另一方面,@Frozen注释当前对映射器没有影响,它只是信息,直到映射器支持模式生成。