2017-04-06 39 views
1

我有一個Java類正在使用datastax cassandra驅動程序將一個pojo寫入cassandra表。一切工作正常,直到需要寫一個類對象到cassandra表。它拋出這個錯誤:Java/Cassandra拋出錯誤併產生凍結屬性

產生的原因:com.datastax.driver.core.exceptions.CodecNotFoundException:編解碼器找不到請求的操作:冷凍< 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.... 
} 

那麼我忽略了什麼?挖掘到datastax文檔並沒有顯示出超出這個範圍的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

smi是一個UDT不是嗎?在這種情況下,MyCustomSmiObject應註明@UDT(keyspace="projkeyspace", name="smi")而不是@Table。通過這樣做,驅動程序應該檢測到這是一個UDT,它會爲它註冊一個自定義的編解碼器,這將允許它能夠正確地序列化和反序列化它。

在另一個註釋中,@Frozen註釋當前對映射器沒有任何影響,直到映射器支持模式生成爲止,此時它只是信息性的。

+1

是的,我不知道UDT。這是答案,謝謝! – Jicaar