[英]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.