spring - jsonb原生查询中LIKE运算符的参数绑定值
问题描述
我在使用 LIKE 运算符使用 Postgres jsonb 语法将参数值声明和绑定到本机查询时遇到问题。
它对 = 运算符非常有效,但不适用于 LIKE。
这适用于 = 运算符:
Query searchQuery = em.createNativeQuery("SELECT * FROM myTable WHERE myJsonBField @> CAST(:param1 as jsonb)", MyEntity.class);
searchQuery.setParameter("param1","{\"attribute\":\"value\"}");
List<MyEntity> queryResult = searchQuery.getResultList();
这就是我想用 LIKE 运算符做的事情
Query searchQuery = em.createNativeQuery("SELECT * FROM myTable WHERE myJsonBField --> 'attribute' LIKE :param1", MyEntity.class);
searchQuery.setParameter("param1","'%value%'");
List<MyEntity> queryResult = searchQuery.getResultList();
例外是:
org.springframework.dao.InvalidDataAccessApiUsageException: Unknown parameter name : param1; nested exception is java.lang.IllegalArgumentException: Unknown parameter name : param1
任何人都知道如何使用 LIKE 运算符的参数并对其进行修补?
解决方案
好的,我发现了错误。
正确的方法是:
Query searchQuery = em.createNativeQuery("SELECT * FROM myTable WHERE myJsonBField->> 'attribute' LIKE :param1", MyEntity.class);
searchQuery.setParameter("param1","'%value%'");
List<MyEntity> queryResult = searchQuery.getResultList();
推荐阅读
- c++ - 如何使用 C++11 或更高版本编译 GNU 通用 C++ 类框架?
- java - 禁用特定 url 的登录页面重定向,但仍需要其身份验证
- sqlite - One-Mnay 关系和Many-Many 关系之间的区别
- angular - Spring WebFlux SSE + angular - 检测打开的连接
- python - 使用 python Reportlabs 和 1 个 CSV 创建多个 PDF
- sitecore - 是否可以更改 sitecore10.1 中的用户名验证?
- api - Shopware 6 Store-API 设置时事通讯收件人标签
- windows - Flutter windows 桌面应用程序兼容性
- java - 如何使用命令打开聚光灯
- woocommerce - 以编程方式更改 Woocommerce 订单状态