问题描述
我是cassandra的新手,并且遇到以下问题:我定义了一个简单的UDT 导入com.datastax.oss.driver.api.mapper.annotations.CqlName;
@CqlName("emailaddress")
public class EmailAddress {
private String name;
private String email_address;
public EmailAddress() {}
public EmailAddress(String name,String emailAddress) {
this.name = name;
this.email_address = emailAddress;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail_address() {
return email_address;
}
public void setEmail_address(String email_address) {
this.email_address = email_address;
}
}
我为实体定义了以下行:
....
@Frozen
private List<EmailAddress> participants;
.....
我用一个方法save()创建了一个简单的Dao,但是当我尝试运行它时却遇到了错误
在实体类com.salesforceiq.graph.sigparser.Signatures中定义的CQL ks.table:signature_data.signatures声明编解码器注册表不支持的类型映射: 字段:参与者,实体类型:com.salesforceiq.graph.sigparser.EmailAddress,CQL类型:UDT(signature_data.emailaddress) java.lang.IllegalArgumentException:在实体类com.salesforceiq.graph.sigparser.Signatures中定义的CQL ks.table:signature_data.signatures声明了编解码器注册表不支持的类型映射: 字段:参与者,实体类型:com.salesforceiq.graph.sigparser.EmailAddress,CQL类型:UDT(signature_data.emailaddress)
我可能会错过一些有关UDT的注释,但我不知道是哪一个
解决方法
我假设您用@Entity
注释了UDT类。有关示例,请参见Cassandra Java驱动程序的Entities页。
在participants
列上似乎失败。不支持其类型,因此您可能需要为其实现自定义编解码器。有关详细信息,请参见Custom codecs页。干杯!