【发布时间】:2022-10-12 22:21:03
【问题描述】:
在 Java 中,使用 Azure Cosmos Query 注释,我试图提取 ID 与提供的 ID 之一匹配的数据:
@Query("SELECT * FROM c WHERE c.id IN (@ids)")
List<Object> getItems(@Param("ids") String ids);
例如
SELECT * FROM c WHERE c.id IN ("111", "222", "333")
我不能将 ID 作为 List 传递,或者直接将 List 转换为 String,因为它将包含方括号 [] 作为搜索条件的一部分,并且它也将被视为一个项目,而不是一个数组项目。
参考以下解决方案here,我尝试将列表转换为字符串,然后操作字符串,使其以逗号分隔的方式在每个项目周围包含引号。但是,即使列表中只有一项,它也不返回任何数据。单引号和双引号都是这种情况。
这是我目前从 List 到 String 的解决方案:
String ids= list.stream().map(s -> "'" + s + "'").collect(Collectors.joining(","));
在 Java 中,如何在 @Query 中为使用 IN 的 SQL 传递一个列表?
【问题讨论】:
-
List<Object> getItems(@Param("ids") List<*class of the ids*> ids); -
@Jens 我试过了,它不起作用,不返回任何结果
-
没有结果并不意味着它不起作用。你确定你应该得到一个结果。您是否查看过日志文件,生成的查询是什么样的?
-
我一直在尝试修改我的 application.yml 以在日志中显示这一点。我还没有找到正确的设置。
-
@Kurtiss - 太好了,你正在使用
array_contains()- 如果你还没有提到它,我会建议它。仅供参考,我发布了一些与array_contains()相关的答案,包括this one - 该特定答案说明了一个标量数组 - 您也可以将它与对象数组一起使用。
标签: java azure-cosmosdb