在使用 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 不能与对象集合一起使用?
查询应该有下一个主体:
@Query("SELECT * FROM dialects WHERE type = 'Artificial' AND ((:languages) IS NULL OR language IN (:languages))")
findAllByTypeAndLanguages(@Param("languages") List<String> languages);
因为当你有一个可以是
NULL
的参数集合时,查询参数也应该在()
中。