在Java中将Cassandra映射器与UDT一起使用

问题描述

我是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页。干杯!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...