在使用datastax为udt编写自定义编解码器时,如何将cql文本转换为java对象?

83qze16e  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(216)

在cassandra键空间中有一个表叫做 User 其中必须有一个名为 Address . 类型 Address 已经创建并且 User 表是在相同的键空间中创建的。但是在运行应用程序的时候,它需要编解码器 Address.java 具体如下: Codec not found for requested operation: [UDT(library.address) <-> com.mypackage.demoapp.dao.Address] .
所以我现在尝试为我的 Address.java 班级。课程结构如下:

public class AddressCodec extends TypeCodec.AbstractUDTCodec<Address> {

    protected AddressCodec(UserType definition, Class<Address> javaClass) {
        super(definition, javaClass);
    }

    @Override
    protected Address newInstance() {
        return null;
    }

    @Override
    protected ByteBuffer serializeField(Address address, String s, ProtocolVersion protocolVersion) {
        return null;
    }

    @Override
    protected Address deserializeAndSetField(ByteBuffer byteBuffer, Address address, String s, ProtocolVersion protocolVersion) {
        return null;
    }

    @Override
    protected String formatField(Address address, String s) {
        return null;
    }

    @Override
    protected Address parseAndSetField(String input, Address address, String fieldName) {
        return null;
    }
}

但是,我不了解如何在的cql字段和java字段之间Map/序列化/反序列化 Address . 一些解释或示例代码将非常有用。
注意:我没有使用spring框架,也没有寻找任何面向spring的配置技术。
谢谢。

gzjq41n4

gzjq41n41#

对于java驱动程序3,而不是使用 TypedCodec.AbstractUDTCodec 只需按照编解码器上的驱动程序文档进行操作,并按以下方式实现编解码器:
复制 AddressCodec 在文档中
调整 toAddress 以及 toUDTValue 函数来获取/设置pojo的必需字段
对于java驱动程序4.x,使用对象Map器,只需使用 @Entity (添加 @CqlName 如有必要,当pojo的名称不同于udt的名称时)。请参阅相关文档。

相关问题