当前位置: 首页 > 知识库问答 >
问题:

如何将PSQLs::json@>::json转换为jpa/jpql谓词

万俟修诚
2023-03-14

假设我有一个这样的数据库表:

CREATE TABLE myTable(
   id BIGINT, 
   date TIMESTAMP, 
   user_ids JSONB 
);

< code>user_ids是一个< code>JSONB-ARRAY

让此表的记录如下所示:

{
     "id":13,
     "date":"2019-01-25 11:03:57",
     "user_ids":[25, 661, 88]
};

我需要查询user_ids包含 25 条的所有记录。在SQL中,我可以通过以下选择语句来实现它:

SELECT * FROM myTable where user_ids::jsonb @> '[25]'::jsonb;

现在我需要编写一个JPA谓词来呈现< code >“user _ ids::jsonb @

共有1个答案

慕容聪
2023-03-14

幸运的是,PostgreSQL中的每个比较运算符只是函数的别名,您可以通过输入\doS和运算符通过psql控制台找到别名(尽管一些运算符在此搜索中被视为通配符,因此它们给出的结果比预期的要多)。

结果如下:

postgres=# \doS+ @>
                                          List of operators
   Schema   | Name | Left arg type | Right arg type | Result type |      Function       | Description 
------------+------+---------------+----------------+-------------+---------------------+-------------
 pg_catalog | @>   | aclitem[]     | aclitem        | boolean     | aclcontains         | contains
 pg_catalog | @>   | anyarray      | anyarray       | boolean     | arraycontains       | contains
 pg_catalog | @>   | anyrange      | anyelement     | boolean     | range_contains_elem | contains
 pg_catalog | @>   | anyrange      | anyrange       | boolean     | range_contains      | contains
 pg_catalog | @>   | box           | box            | boolean     | box_contain         | contains
 pg_catalog | @>   | box           | point          | boolean     | box_contain_pt      | contains
 pg_catalog | @>   | circle        | circle         | boolean     | circle_contain      | contains
 pg_catalog | @>   | circle        | point          | boolean     | circle_contain_pt   | contains
 pg_catalog | @>   | jsonb         | jsonb          | boolean     | jsonb_contains      | contains
 pg_catalog | @>   | path          | point          | boolean     | path_contain_pt     | contains
 pg_catalog | @>   | polygon       | point          | boolean     | poly_contain_pt     | contains
 pg_catalog | @>   | polygon       | polygon        | boolean     | poly_contain        | contains
 pg_catalog | @>   | tsquery       | tsquery        | boolean     | tsq_mcontains       | contains
(13 rows)

你想要的是两边的jsonb参数,我们看到有一个名为< code>jsonb_contains的函数。所以相当于< code > jsonbcolumn @

从这里开始,您可以选择使用本机查询,或者通过扩展现有查询来添加您自己的Hibernate Dialect。

 类似资料:
  • 我在MongoDB中使用Java驱动程序3.0,以便通过Web服务发送JSON。 当我想将文档对象(org.bson.文档)转换为JSON时,我使用,当我想将JSON转换为文档对象时,我使用。 但是,当我处理文档列表时(如JSON中所示:

  • 问题内容: 如何将JSON字符串简单地转换为C#,最好不使用第三方解析器? 问题答案: 我不确定为什么每个人仍然推荐JSON.NET来反序列化JSON。我写了一篇有关如何将JSON反序列化为C#的博客文章。 简而言之,它是这样的: 确保添加对System.Web.Extensions.dll的引用。 注意: 我通常反序列化为,所以我假设这会起作用。但是,我还没有验证它是否确实如此。

  • 问题内容: 我想从Web服务中检索JSON,然后进行解析。 我走对了吗? 不幸的是,我不知道如何转换为JSONObject。 这是我的JSON(摘录): 问题答案: 您可以将字符串转换为json:

  • 问题内容: 我有一个想要表示为C#类的复杂JSON对象。我在名为“ Form”的父类上有一个良好的开端,但是如何代表不同类型的集合(请参见下面的“ elements”对象)? 这是JSON对象: 我开始的课程看起来像这样: 如何处理“ elements”属性以获得所需的JSON输出? 我正在WCF 4.0和web.config中的以下属性一起使用:automaticFormatSelectionE

  • 问题内容: 我有一个要转换为CSV文件的JSON文件。如何使用Python执行此操作? 我试过了: 但是,它没有用。我正在使用Django,收到的错误是: 然后,我尝试了以下方法: 然后我得到错误: 样本json文件: 问题答案: 首先,你的JSON具有嵌套对象,因此通常无法直接将其转换为CSV。你需要将其更改为以下内容: 这是从中生成CSV的代码: 你将获得以下输出:

  • 转换为json格式。