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