我有一个用户表及其对应的 POJO
@Table
public class User{
@Column(name = "id")
private String id;
// lots of fields
@Column(name = "address")
@Frozen
private Optional<Address> address;
// getters and setters
}
@UDT
public class Address {
@Field(name = "id")
private String id;
@Field(name = "country")
private String country;
@Field(name = "state")
private String state;
@Field(name = "district")
private String district;
@Field(name = "street")
private String street;
@Field(name = "city")
private String city;
@Field(name = "zip_code")
private String zipCode;
// getters and setters
}
我想将 UDT“地址”转换为可选。因为我使用“cassandra-driver-mapping:3.0.0-rc1”和“cassandra-driver-extras:3.0.0-rc1”,所以我可以使用很多编解码器。
例如:可选编解码器
我想将它注册到 CodecRegistry 并将 TypeCodec 传递给 OptionalCodec 的构造函数。
但是 TypeCodec 是一个抽象类,我无法启动它。
有人知道如何启动 OptionalCodec 吗?
谢谢你,@Olivier Michallat。你的解决方案没问题!
但是我对将 OptionalCodec 设置为 CodecRegistry 有点困惑。您必须首先启动会话。然后将会话传递给 MappingManager,获取正确的 TypeCodec 并注册编解码器。
为了获得 TypeCodec ,您必须首先进行初始会话,这有点奇怪!?
Cluster cluster = Cluster.builder()
.addContactPoints("127.0.0.1")
.build();
Session session = cluster.connect(...);
cluster.getConfiguration()
.getCodecRegistry()
.register(new OptionalCodec(new MappingManager(session).udtCodec(Address.class)))
.register(...);
// use session to operate DB