How to filter rows based on jsonb column array values on jpql query with spring data

问题描述 投票:0回答:0

我用 spring boot、spring data 和 postgresql(v.12.3) 开发了一个应用程序。我有一个包含 jsonb 列的表。此 jsonb 列的每一行都有数组参数,例如:

{
  "comboItems": [
    {
      "id": "1e9b92c2-e97d-4415-b532-18cf7aa6d57c",
      "name": "Name1"
    },
    {
      "id": "1e9b92c2-e97d-4415-b532-18cf7aa6d57a",
      "name": "Name2"
    }
  ]
}

我想根据 jsonb 列中的“id”值过滤表的行,但我想通过 spring data - jpql 来完成。如果我对此没有解决方案,那么我可以使用本机查询解决方案。

我可以为 jsonb 列的 comboItems 的第一个元素过滤行,但我需要搜索 comboItems 中的所有项目:

@Query(value = "SELECT r " 
    + "FROM Table r " 
    + "WHERE FUNCTION('jsonb_extract_path_text', r.buyerResponsibleData, 'comboItems', '0', 'id') IN :buyerResponsibles) ")
List<Table> findTables(@Param("buyerResponsibles") List<String> buyerResponsibles);

buyerResponsibles 是一个字符串列表,例如:

final List<String> buyerResponsibles = new ArrayList<>();

buyerResponsibles.add("1e9b92c2-e97d-4415-b532-18cf7aa6d57c");
buyerResponsibles.add("1e9b92c2-e97d-4415-b532-18cf7aa6d57z");

如何通过搜索 jsonb 列的组合项中的所有项目来过滤它?

postgresql spring-data jpql jsonb
© www.soinside.com 2019 - 2024. All rights reserved.