带有可为空集合的Spinrg-data-jdbc查询

问题描述 投票:0回答:1

在使用 spring-data-jdbc 和 postgresql 存储和搜索数据时,我无法在 @Query 注释中提出可以覆盖空集合的查询。 我的意思是下面的简化示例:

@Query("SELECT * FROM dialects WHERE type = 'Artificial' AND (:languages IS NULL OR language IN (:languages))")
findAllByTypeAndLanguages(@Param("languages") List<String> languages);

当我使用 languages = null 调用存储库时,出现错误: org.postgresql.util.PSQLException:错误:无法确定参数 $1 的数据类型

我在文档中没有找到如何做到这一点的示例。 当然,我可以在java代码中处理空值并相应地调用存储库方法,但在我的例子中,搜索可以有一些集合作为输入参数,如果我用单独的查询覆盖每个案例,那将会很混乱..

我也尝试使用字符串数组,但没有成功。但是,它似乎可以与 List 一起使用,那么这是否意味着 spring-data-jdbc 不能与对象集合一起使用?

spring-data spring-data-jdbc
1个回答
0
投票

查询应该有下一个主体:

@Query("SELECT * FROM dialects WHERE type = 'Artificial' AND ((:languages) IS NULL OR language IN (:languages))")
findAllByTypeAndLanguages(@Param("languages") List<String> languages);

因为当你有一个可以是

NULL
的参数集合时,查询参数也应该在
()
中。

© www.soinside.com 2019 - 2024. All rights reserved.