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