java—如何用{}传递jpa查询中list的参数

lokaqttq  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(1229)

下面的查询是postgresql中的wokring,并给出了所需的结果,但在java中尝试时给出了错误。

select * from res where 
'{"^\\d{3}\\d{1,}133\\d{1,}$","^\\d{3}7483"}' is null
or exists (select from unnest(cast('{"^\\d{3}\\d{1,}133\\d{1,}$","^\\d{3}7483"}' as text[])) rx where cast (r.res_value as text) ~ rx);

javacode:-

@Query(value = "select * from res where 
'{?1 is null
or exists (select from unnest(cast(?1 as text[])) rx where cast (r.res_value as text) ~ rx)",nativeQuery = true)
public List<Res> getData(List<String> patterns);

List of patterns = 
^\\d{3}\\d{1,}133\\d{1,}$
^\\d{3}7483

获取时出错-“error:数组文字格式错误:^\d{3}\d{1,}133\d{1,}$detail:数组值必须以“{”或维度信息开头。
我怎样才能把{}加到这些。。jpa中的任何解决方案

ztmd8pv5

ztmd8pv51#

最好在java中将字符串列表转换为字符串,并将其作为字符串参数传递给jpa查询。
步骤1:在传递给jpa之前,将字符串列表转换为java中的字符串 Java: String patternsStr = patterns.stream().map(p -> "\"" + p + "\"").collect(Collectors.joining(",", "{", "}")); 第二步:将@query method中的参数类型从list改为string JPA: public List<Res> getData(String patternsStr); 您提到的postgressql查询接受regx数组作为字符串。因此很容易将regx列表作为字符串传递给jpa查询。

相关问题