用于 json 列搜索的 JPA 查询

问题描述 投票:0回答:1
{
   "store_ids":[
      {
         "name":"Gupta General store",
         "store_id":"SSC10000020"
      },
      {
         "name":"Gupta General store2",
         "store_id":"SSC10000022"
      }
   ]
}

这是 mysql 表列中的 json 对象,我需要一个 jpa 查询,其中我想提取表中“store_id”与给定字符串列表中匹配的所有行

@Query("SELECT m FROM MerchantManager m WHERE (JSON_EXTRACT(m, '$.store_ids.store_id') IN ('SSC10000020','SSC10000022'))")
    List<MerchantManager> findByStoreId();

我想知道如何在 Spring Boot 中编写这个查询

mysql spring-boot jpa spring-data-jpa json-query
1个回答
0
投票

对于整个 JSON 数组中所有行的单值搜索,您可以这样搜索:

@Query(value = "SELECT * from MerchantManager where JSON_CONTAINS(JSON_EXTRACT( columnName, '$.store_ids[*].store_id'), '\"SSC10000020\"')",nativeQuery = true)

但是如果要搜索多个值,则需要使用

JSON_CONTAINS
函数的 OR 运算符。

@Query(value = "SELECT * from MerchantManager where JSON_CONTAINS(JSON_EXTRACT( columnName, '$.store_ids[*].store_id'), '\"SSC10000020\"' OR JSON_CONTAINS(JSON_EXTRACT( columnName, '$.store_ids[*].store_id'), '\"SSC10000022\"')",nativeQuery = true)

使用

IN
运算符可能还有其他有效的方法,但我不知道。我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.