在使用 datastax 为我的 UDT 编写自定义编解码器时,如何将 CQL 文字转换为 java 对象?

How can I convert a CQL literal to a java object while writing custom codec for my UDT using datastax?

我在 Cassandra 键空间中有一个名为 User 的 table,它必须有一个名为 Address 的 UDT 字段。 TYPE Address 已创建,User table 也在同一键空间中创建。但是,虽然 运行 应用程序要求 Address.java 的编解码器如下:

Codec not found for requested operation: [UDT(library.address) <-> com.mypackage.demoapp.dao.Address].

所以我现在正在尝试为我的 Address.java class 创建自定义编解码器。以下是 class 的结构:

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;
    }
}

但是,我不明白如何在 Address 的 CQL 字段和 Java 字段之间 map/serialize/de-serialize。一些解释或示例代码会很有帮助。

注意:我没有使用 SPRING 框架,并且 没有 寻找任何 SPRING 面向配置的技术。

谢谢。

对于 Java 驱动程序 3,不要使用 TypedCodec.AbstractUDTCodec,只需遵循驱动程序 documentation on codecs,并按如下方式实现您的编解码器:

  • 复制文档中AddressCodec的全部源代码
  • toAddresstoUDTValue 函数调整为 get/set POJO 的必要字段

对于 Java 驱动程序 4.x,使用对象映射器,只需用 @Entity 注释您的 POJO(如有必要,添加 @CqlName,当 POJO 的名称不同于)。见documentation就可以了。