繁体   English   中英

Postgres查询JSONB在spring-data中不起作用

[英]Postgres Query JSONB doesn't work in spring-data

我在尝试查询我的postgres数据库上的JSONB列时遇到问题。

我有此列,在我的表中称为上下文,它是JSONB类型,我想使用一个数组对其进行查询,并希望得到与搜索匹配的结果。

这是我的查询在postgres上工作

SELECT distinct on (name) * 
FROM profile WHERE field_id = '8eda85ab-1e03-4914-8cb4-8bc5bbb62a97'
AND context -> 'field2' @> ANY (ARRAY ['[{"name":"XXX1", "version": "1.0.0"}]', '[{"name":"XXX2", "version":"1.0.0" }]']::jsonb[])
ORDER BY name, cast(string_to_array(version, '.') as int[]) desc, sequence desc 

它在postgres上完美工作。

比我在存储库中有此方法:

@Query(value =
      "SELECT distinct on (name) * FROM my_table WHERE field_id = ?1 "
          + "AND context -> 'dataViews' @> ANY (ARRAY [?2]\\:\\:jsonb[])  "
          + "ORDER BY name, cast(string_to_array(version, '.') as int[]) desc, sequence desc", nativeQuery = true)
  Page<MyObject> findResult(Pageable pageable, UUID fieldId,
      String field2);

所以从我的spring数据生成的查询是这样的:

FROM profile WHERE field_id = '8eda85ab-1e03-4914-8cb4-8bc5bbb62a97'
AND context -> 'field2' @> ANY (ARRAY [['{"name":"XXX1", "version": "1.0.0"}], [{"name":"XXX2", "version":"1.0.0" }']]::jsonb[])
ORDER BY name, cast(string_to_array(version, '.') as int[]) desc, sequence desc 

因为我将我的数组作为字符串传递,所以它不能识别为不同的数组,所以此查询不返回任何内容...但是我对postgres的查询返回2个结果,这就是我期望的原因。 我试图重现该问题,即在每个对象的开头使用单引号使我在postgres中具有完全相同的查询,但是它抛出一个异常,说单引号对于JSON是无效的开始。

有什么建议或以更好的方式做到这一点?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM