我正在使用下一个堆栈:Spring Boot,Spring Data Cassandra,Kotlin
所以我有一些枚举:
enum class SomeEnum() { VALUE }
使用它作为Map键的类:
data class MyClass() {
@Column("value")
value: Map<SomeEnum, String>
}
我也注册了自定义编解码器:
@Override
protected ClusterBuilderConfigurer getClusterBuilderConfigurer() {
return clusterBuilder -> {
clusterBuilder.getConfiguration().getCodecRegistry()
.register(new EnumNameCodec<>(SomeEnum.class));
return clusterBuilder;
};
}
在Cassandra中,这是map [varchar,varchar]。
事情是:我可以成功写出值。我可以毫无错误地阅读它。 但是在运行时我有键类型String而不是SomeEnum。 所以不幸的是,直接地图功能不起作用:
myClass.getValue().get(SomeEnum.VALUE)
将始终返回null。
相同的故事,但List类型工作正常,并在运行时有枚举。
使用POJO而不是Kotlin类可以得到相同的结果。
请帮忙。提前谢谢。