Java 在cassandra中使用UDT(用户定义类型)处理映射

Java 在cassandra中使用UDT(用户定义类型)处理映射,java,spring-boot,collections,cassandra,datastax-java-driver,Java,Spring Boot,Collections,Cassandra,Datastax Java Driver,假设我在Cassandra中有一个产品表和信息UDT Create table Product{ id text, details map<text,<frozen<Information>>, detailsMore list<frozen<Information>> } Create Type Information{ info1 text, info2 text } 现在这个prodObj包含如

假设我在Cassandra中有一个产品表信息UDT

Create table Product{
    id text,
    details map<text,<frozen<Information>>,
    detailsMore list<frozen<Information>>
}
Create Type Information{
    info1 text,
    info2 text
}
现在这个prodObj包含如下数据

details map<String,UDTValue>,
detailsMore list<Information>
详细地图,
详细信息更多列表
为什么用户定义的类型在列表中转换为信息,而在映射中没有转换?还是我做错了什么?。如果我直接尝试将Map的UDTValue分配给信息,我会得到以下异常(显而易见)。
java.lang.ClassCastException:com.datastax.driver.core.UDTValue不能转换为信息

您需要为类编写自定义编解码器,将
UDTValue
映射到
信息
类中。请参阅(我不想复制他们的代码作为插图)


提供示例后更新:我不熟悉Spring Cassandra Mapper,但您可以直接使用。您需要用
@UDT
注释来标记表示用户定义类型的类,驱动程序会处理它。我已经创建了一个工作示例-它是可用的(请参见执行结果的
输出部分)。

就是这样,我的意思是它只有在Map的情况下才会失败,而对于直接类信息,它看起来工作得很好。我对声明的类型使用@org.springframework.data.cassandra.mapping.UserDefinedType,它映射得很好。但在地图中也不起作用。更新了问题的更多细节,希望现在有人能帮助我。我已经更新了答案-不幸的是,我不熟悉Spring mapper。。。而且它还没有得到官方的支持…但是
spring boot
并不意味着
spring data cassandra
并且
spring data cassandra
依赖于java驱动程序,所以您可以直接使用它。。。
Product prodObj = repo.find(id);
details map<String,UDTValue>,
detailsMore list<Information>