cassandra CQL Datastax JavaMap集/列表查询操作

agxfikkp  于 2023-11-18  发布在  Cassandra
关注(0)|答案(3)|浏览(130)

嗨,我目前正试图设置我的CQL道,以实现一些查询功能,但我找不到一种方法来把任何对象的集合作为一个参数,因为我一直得到这个错误的编解码器:Codec not found for requested operation: [TEXT <-> java.util.List<java.lang.String>]
我试着使用这个,但它不工作:

@Select(customWhereClause = "labels CONTAINS :labels", perPartitionLimit = "1")
fun dependenciesByLabels(@CqlName("labels") labels: Collection<String>): PagingIterable<Dependency>

字符串

xmjla07d

xmjla07d1#

我想我在Cassandra中的认知是不够的。事实上,似乎我们可以在集合上使用多个值的CONTAINS cassandra运算符:

这个可以用

SELECT * FROM your_table WHERE labels CONTAINS 'label';

字符串

这个不行

SELECT * FROM your_table WHERE labels CONTAINS { 'label1', 'label2' };

nlejzf6q

nlejzf6q2#

您可能需要为您的集合定义一个编解码器,这里有一些例子:https://docs.datastax.com/en/developer/java-driver/3.5/manual/custom_codecs/#creating-custom-codecs-for-user-defined-types-ud-ts如果这没有帮助,请包括您的集合/类型定义。

z3yyvxxp

z3yyvxxp3#

Codec not found for requested operation: [TEXT <-> java.util.List<java.lang.String>]

字符串
因此,此错误消息意味着您正在尝试将定义为TEXT(UTF字符串)的列Map到Java List<String>
它看起来确实像是在应用程序端使用了一个集合,所以我会检查表定义并确保列定义为List<TEXT>

相关问题