在使用 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
的全部源代码
- 将
toAddress
和 toUDTValue
函数调整为 get/set POJO 的必要字段
对于 Java 驱动程序 4.x,使用对象映射器,只需用 @Entity
注释您的 POJO(如有必要,添加 @CqlName
,当 POJO 的名称不同于)。见documentation就可以了。
我在 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
的全部源代码 - 将
toAddress
和toUDTValue
函数调整为 get/set POJO 的必要字段
对于 Java 驱动程序 4.x,使用对象映射器,只需用 @Entity
注释您的 POJO(如有必要,添加 @CqlName
,当 POJO 的名称不同于)。见documentation就可以了。